mirror of
https://gitee.com/san-bing/JChargePointProtocol
synced 2026-05-05 10:29:56 +08:00
636 lines
19 KiB
Markdown
636 lines
19 KiB
Markdown
|
|
# REST API
|
|||
|
|
|
|||
|
|
<cite>
|
|||
|
|
**本文档引用的文件**
|
|||
|
|
- [UserController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/UserController.java)
|
|||
|
|
- [StationController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/StationController.java)
|
|||
|
|
- [PileController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/PileController.java)
|
|||
|
|
- [GunController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/GunController.java)
|
|||
|
|
- [ProtocolController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/ProtocolController.java)
|
|||
|
|
- [RpcController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/RpcController.java)
|
|||
|
|
- [BaseController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/BaseController.java)
|
|||
|
|
- [ApiResponse.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/response/ApiResponse.java)
|
|||
|
|
- [LoginResponse.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/response/LoginResponse.java)
|
|||
|
|
- [ErrorCode.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/response/ErrorCode.java)
|
|||
|
|
- [JCPPErrorCode.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/exception/JCPPErrorCode.java)
|
|||
|
|
- [PageRequest.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/request/PageRequest.java)
|
|||
|
|
- [StationCreateRequest.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/request/StationCreateRequest.java)
|
|||
|
|
- [PileCreateRequest.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/request/PileCreateRequest.java)
|
|||
|
|
- [GunCreateRequest.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/request/GunCreateRequest.java)
|
|||
|
|
- [RpcRequest.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/request/RpcRequest.java)
|
|||
|
|
- [StartChargeDTO.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/dto/StartChargeDTO.java)
|
|||
|
|
- [SecurityConfiguration.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/service/security/SecurityConfiguration.java)
|
|||
|
|
- [JCPPErrorResponseHandler.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/exception/JCPPErrorResponseHandler.java)
|
|||
|
|
</cite>
|
|||
|
|
|
|||
|
|
## 目录
|
|||
|
|
|
|||
|
|
1. [简介](#简介)
|
|||
|
|
2. [认证机制](#认证机制)
|
|||
|
|
3. [通用响应格式](#通用响应格式)
|
|||
|
|
4. [分页查询参数](#分页查询参数)
|
|||
|
|
5. [全局异常处理](#全局异常处理)
|
|||
|
|
6. [错误码列表](#错误码列表)
|
|||
|
|
7. [用户认证API](#用户认证api)
|
|||
|
|
8. [设备管理API](#设备管理api)
|
|||
|
|
9. [协议交互API](#协议交互api)
|
|||
|
|
10. [远程过程调用API](#远程过程调用api)
|
|||
|
|
11. [curl命令示例](#curl命令示例)
|
|||
|
|
|
|||
|
|
## 简介
|
|||
|
|
|
|||
|
|
本文档为JChargePointProtocol系统提供全面的REST API文档,涵盖用户认证、设备管理、协议交互和远程过程调用等核心功能。所有API端点均采用统一的响应格式和错误处理机制,确保接口的一致性和易用性。
|
|||
|
|
|
|||
|
|
**本文档引用的文件**
|
|||
|
|
|
|||
|
|
- [StationController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/StationController.java)
|
|||
|
|
- [PileController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/PileController.java)
|
|||
|
|
- [GunController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/GunController.java)
|
|||
|
|
- [ProtocolController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/ProtocolController.java)
|
|||
|
|
- [RpcController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/RpcController.java)
|
|||
|
|
|
|||
|
|
## 认证机制
|
|||
|
|
|
|||
|
|
系统采用JWT(JSON Web Token)进行身份认证和授权。客户端在成功登录后会获得一个JWT令牌,后续请求需要在请求头中携带该令牌。
|
|||
|
|
|
|||
|
|
### 认证方式
|
|||
|
|
|
|||
|
|
支持以下两种方式传递JWT令牌:
|
|||
|
|
|
|||
|
|
1. **Authorization请求头**(推荐)
|
|||
|
|
```
|
|||
|
|
Authorization: Bearer <JWT_TOKEN>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **自定义请求头**
|
|||
|
|
```
|
|||
|
|
X-Authorization: <JWT_TOKEN>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 认证流程
|
|||
|
|
|
|||
|
|
1. 用户通过`/api/auth/login`端点进行登录,提供用户名和密码
|
|||
|
|
2. 服务器验证凭据,成功后返回包含JWT令牌的响应
|
|||
|
|
3. 客户端在后续所有请求的请求头中包含JWT令牌
|
|||
|
|
4. 服务器验证令牌的有效性,决定是否授予访问权限
|
|||
|
|
|
|||
|
|
令牌过期后,客户端需要使用刷新令牌获取新的访问令牌。
|
|||
|
|
|
|||
|
|
**本文档引用的文件**
|
|||
|
|
|
|||
|
|
- [SecurityConfiguration.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/service/security/SecurityConfiguration.java)
|
|||
|
|
- [LoginResponse.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/response/LoginResponse.java)
|
|||
|
|
|
|||
|
|
## 通用响应格式
|
|||
|
|
|
|||
|
|
所有API响应均采用统一的`ApiResponse`格式,确保客户端能够一致地处理成功和错误响应。
|
|||
|
|
|
|||
|
|
### 响应结构
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"errorCode": "SUCCESS",
|
|||
|
|
"message": "操作成功",
|
|||
|
|
"data": {},
|
|||
|
|
"timestamp": 1700000000000
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 字段说明
|
|||
|
|
|
|||
|
|
- **success**: 布尔值,表示请求是否成功
|
|||
|
|
- **errorCode**: 错误码,成功时为"SUCCESS",失败时为具体的错误码
|
|||
|
|
- **message**: 响应消息,描述操作结果
|
|||
|
|
- **data**: 响应数据,包含实际的业务数据
|
|||
|
|
- **timestamp**: 时间戳,记录响应生成的时间
|
|||
|
|
|
|||
|
|
### 成功响应示例
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"errorCode": "SUCCESS",
|
|||
|
|
"message": "查询成功",
|
|||
|
|
"data": {
|
|||
|
|
"id": "123e4567-e89b-12d3-a456-426614174000",
|
|||
|
|
"stationName": "测试充电站",
|
|||
|
|
"stationCode": "ST001"
|
|||
|
|
},
|
|||
|
|
"timestamp": 1700000000000
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 错误响应示例
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": false,
|
|||
|
|
"errorCode": "UNAUTHORIZED",
|
|||
|
|
"message": "用户未认证",
|
|||
|
|
"timestamp": 1700000000000
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**本文档引用的文件**
|
|||
|
|
|
|||
|
|
- [ApiResponse.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/response/ApiResponse.java)
|
|||
|
|
|
|||
|
|
## 分页查询参数
|
|||
|
|
|
|||
|
|
大多数查询接口支持分页功能,通过`PageRequest`类定义分页参数。
|
|||
|
|
|
|||
|
|
### 分页参数
|
|||
|
|
|
|||
|
|
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|
|||
|
|
|-----------|---------|----|------|-----------------------|
|
|||
|
|
| page | Integer | 否 | 1 | 页码,从1开始 |
|
|||
|
|
| size | Integer | 否 | 10 | 每页大小 |
|
|||
|
|
| sortField | String | 否 | - | 排序字段 |
|
|||
|
|
| sortOrder | String | 否 | desc | 排序方向:asc(升序)或desc(降序) |
|
|||
|
|
| search | String | 否 | - | 搜索关键词 |
|
|||
|
|
|
|||
|
|
### 示例
|
|||
|
|
|
|||
|
|
获取第2页的充电站列表,每页20条记录,按创建时间降序排列:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
GET /api/stations?page=2&size=20&sortField=createTime&sortOrder=desc
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**本文档引用的文件**
|
|||
|
|
|
|||
|
|
- [PageRequest.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/request/PageRequest.java)
|
|||
|
|
|
|||
|
|
## 全局异常处理
|
|||
|
|
|
|||
|
|
系统通过`BaseController`类提供统一的异常处理机制,确保所有异常都能被妥善处理并返回标准化的错误响应。
|
|||
|
|
|
|||
|
|
### 异常处理流程
|
|||
|
|
|
|||
|
|
1. 捕获控制器中的各种异常
|
|||
|
|
2. 将异常转换为`JCPPException`
|
|||
|
|
3. 通过`JCPPErrorResponseHandler`生成标准化的错误响应
|
|||
|
|
4. 返回给客户端
|
|||
|
|
|
|||
|
|
### 支持的异常类型
|
|||
|
|
|
|||
|
|
- `Exception`: 通用异常
|
|||
|
|
- `JCPPException`: JCPP自定义异常
|
|||
|
|
- `MethodArgumentNotValidException`: 参数校验异常
|
|||
|
|
|
|||
|
|
**本文档引用的文件**
|
|||
|
|
|
|||
|
|
- [BaseController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/BaseController.java)
|
|||
|
|
- [JCPPErrorResponseHandler.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/exception/JCPPErrorResponseHandler.java)
|
|||
|
|
|
|||
|
|
## 错误码列表
|
|||
|
|
|
|||
|
|
系统定义了统一的错误码体系,便于客户端识别和处理不同类型的错误。
|
|||
|
|
|
|||
|
|
### 通用错误码
|
|||
|
|
|
|||
|
|
| 错误码 | 说明 |
|
|||
|
|
|------------------|------------|
|
|||
|
|
| SUCCESS | 操作成功 |
|
|||
|
|
| SYSTEM_ERROR | 系统异常,请稍后重试 |
|
|||
|
|
| BUSINESS_ERROR | 业务处理失败 |
|
|||
|
|
| VALIDATION_ERROR | 参数校验失败 |
|
|||
|
|
| BINDING_ERROR | 数据绑定异常 |
|
|||
|
|
| ILLEGAL_ARGUMENT | 参数错误 |
|
|||
|
|
| ILLEGAL_STATE | 状态错误 |
|
|||
|
|
|
|||
|
|
### 认证授权相关
|
|||
|
|
|
|||
|
|
| 错误码 | 说明 |
|
|||
|
|
|-----------------|---------------|
|
|||
|
|
| UNAUTHORIZED | 用户未认证 |
|
|||
|
|
| AUTH_FAILED | 用户名或密码错误 |
|
|||
|
|
| JWT_AUTH_FAILED | JWT Token认证失败 |
|
|||
|
|
| FORBIDDEN | 权限不足 |
|
|||
|
|
|
|||
|
|
### 资源相关
|
|||
|
|
|
|||
|
|
| 错误码 | 说明 |
|
|||
|
|
|-----------|----------|
|
|||
|
|
| NOT_FOUND | 请求的资源不存在 |
|
|||
|
|
| CONFLICT | 资源冲突 |
|
|||
|
|
|
|||
|
|
### 业务特定错误码
|
|||
|
|
|
|||
|
|
| 错误码 | 说明 |
|
|||
|
|
|---------------------|----------|
|
|||
|
|
| PILE_CODE_EXISTS | 充电桩编码已存在 |
|
|||
|
|
| STATION_NAME_EXISTS | 充电站名称已存在 |
|
|||
|
|
| GUN_CODE_EXISTS | 充电枪编号已存在 |
|
|||
|
|
| PILE_NOT_FOUND | 充电桩不存在 |
|
|||
|
|
| STATION_NOT_FOUND | 充电站不存在 |
|
|||
|
|
| GUN_NOT_FOUND | 充电枪不存在 |
|
|||
|
|
|
|||
|
|
**本文档引用的文件**
|
|||
|
|
|
|||
|
|
- [ErrorCode.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/response/ErrorCode.java)
|
|||
|
|
- [JCPPErrorCode.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/exception/JCPPErrorCode.java)
|
|||
|
|
|
|||
|
|
## 用户认证API
|
|||
|
|
|
|||
|
|
提供用户登录和获取用户信息的接口。
|
|||
|
|
|
|||
|
|
### 登录
|
|||
|
|
|
|||
|
|
- **HTTP方法**: POST
|
|||
|
|
- **URL路径**: `/api/auth/login`
|
|||
|
|
- **请求头**: 无特殊要求
|
|||
|
|
- **请求体**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"username": "string",
|
|||
|
|
"password": "string"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
- **响应体**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"errorCode": "SUCCESS",
|
|||
|
|
"message": "操作成功",
|
|||
|
|
"data": {
|
|||
|
|
"token": "string",
|
|||
|
|
"refreshToken": "string",
|
|||
|
|
"tokenType": "Bearer",
|
|||
|
|
"user": {
|
|||
|
|
"id": "string",
|
|||
|
|
"username": "string",
|
|||
|
|
"status": "ENABLE"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"timestamp": 1700000000000
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 获取用户信息
|
|||
|
|
|
|||
|
|
- **HTTP方法**: GET
|
|||
|
|
- **URL路径**: `/api/user/info`
|
|||
|
|
- **请求头**: `Authorization: Bearer <JWT>`
|
|||
|
|
- **响应体**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"errorCode": "SUCCESS",
|
|||
|
|
"message": "操作成功",
|
|||
|
|
"data": {
|
|||
|
|
"id": "string",
|
|||
|
|
"username": "string",
|
|||
|
|
"status": "ENABLE"
|
|||
|
|
},
|
|||
|
|
"timestamp": 1700000000000
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**本文档引用的文件**
|
|||
|
|
|
|||
|
|
- [UserController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/UserController.java)
|
|||
|
|
- [LoginResponse.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/response/LoginResponse.java)
|
|||
|
|
|
|||
|
|
## 设备管理API
|
|||
|
|
|
|||
|
|
提供对充电站、充电桩和充电枪的增删改查操作。
|
|||
|
|
|
|||
|
|
### 充电站管理
|
|||
|
|
|
|||
|
|
#### 查询充电站列表
|
|||
|
|
|
|||
|
|
- **HTTP方法**: GET
|
|||
|
|
- **URL路径**: `/api/stations`
|
|||
|
|
- **请求头**: `Authorization: Bearer <JWT>`
|
|||
|
|
- **查询参数**: 继承自`PageRequest`
|
|||
|
|
- **响应体**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"errorCode": "SUCCESS",
|
|||
|
|
"message": "查询成功",
|
|||
|
|
"data": {
|
|||
|
|
"content": [
|
|||
|
|
{
|
|||
|
|
"id": "uuid",
|
|||
|
|
"stationName": "string",
|
|||
|
|
"stationCode": "string",
|
|||
|
|
"longitude": 120.123,
|
|||
|
|
"latitude": 30.456,
|
|||
|
|
"province": "string",
|
|||
|
|
"city": "string",
|
|||
|
|
"county": "string",
|
|||
|
|
"address": "string"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"totalElements": 1,
|
|||
|
|
"totalPages": 1,
|
|||
|
|
"page": 1,
|
|||
|
|
"size": 10
|
|||
|
|
},
|
|||
|
|
"timestamp": 1700000000000
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 创建充电站
|
|||
|
|
|
|||
|
|
- **HTTP方法**: POST
|
|||
|
|
- **URL路径**: `/api/stations`
|
|||
|
|
- **请求头**: `Authorization: Bearer <JWT>`
|
|||
|
|
- **请求体**: `StationCreateRequest`
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"stationName": "string",
|
|||
|
|
"stationCode": "string",
|
|||
|
|
"longitude": 120.123,
|
|||
|
|
"latitude": 30.456,
|
|||
|
|
"province": "string",
|
|||
|
|
"city": "string",
|
|||
|
|
"county": "string",
|
|||
|
|
"address": "string"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
- **字段说明**:
|
|||
|
|
- stationName: 充电站名称,必填,不能为空
|
|||
|
|
- stationCode: 充电站编码,必填,不能为空
|
|||
|
|
- longitude: 经度,浮点数
|
|||
|
|
- latitude: 纬度,浮点数
|
|||
|
|
- province: 省份
|
|||
|
|
- city: 城市
|
|||
|
|
- county: 区县
|
|||
|
|
- address: 详细地址
|
|||
|
|
|
|||
|
|
**本文档引用的文件**
|
|||
|
|
|
|||
|
|
- [StationController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/StationController.java)
|
|||
|
|
- [StationCreateRequest.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/request/StationCreateRequest.java)
|
|||
|
|
|
|||
|
|
#### 更新充电站
|
|||
|
|
|
|||
|
|
- **HTTP方法**: PUT
|
|||
|
|
- **URL路径**: `/api/stations/{id}`
|
|||
|
|
- **请求头**: `Authorization: Bearer <JWT>`
|
|||
|
|
- **路径参数**: id - 充电站ID (UUID)
|
|||
|
|
- **请求体**: `StationUpdateRequest`
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"stationName": "string",
|
|||
|
|
"longitude": 120.123,
|
|||
|
|
"latitude": 30.456,
|
|||
|
|
"province": "string",
|
|||
|
|
"city": "string",
|
|||
|
|
"county": "string",
|
|||
|
|
"address": "string"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 删除充电站
|
|||
|
|
|
|||
|
|
- **HTTP方法**: DELETE
|
|||
|
|
- **URL路径**: `/api/stations/{id}`
|
|||
|
|
- **请求头**: `Authorization: Bearer <JWT>`
|
|||
|
|
- **路径参数**: id - 充电站ID (UUID)
|
|||
|
|
|
|||
|
|
### 充电桩管理
|
|||
|
|
|
|||
|
|
#### 创建充电桩
|
|||
|
|
|
|||
|
|
- **HTTP方法**: POST
|
|||
|
|
- **URL路径**: `/api/piles`
|
|||
|
|
- **请求头**: `Authorization: Bearer <JWT>`
|
|||
|
|
- **请求体**: `PileCreateRequest`
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"pileName": "string",
|
|||
|
|
"pileCode": "string",
|
|||
|
|
"protocol": "string",
|
|||
|
|
"stationId": "uuid",
|
|||
|
|
"brand": "string",
|
|||
|
|
"model": "string",
|
|||
|
|
"manufacturer": "string",
|
|||
|
|
"type": "DC"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
- **字段说明**:
|
|||
|
|
- pileName: 充电桩名称,必填,不能为空
|
|||
|
|
- pileCode: 充电桩编码,必填,不能为空
|
|||
|
|
- protocol: 协议,必填,不能为空
|
|||
|
|
- stationId: 所属充电站ID,必填,不能为空
|
|||
|
|
- brand: 品牌
|
|||
|
|
- model: 型号
|
|||
|
|
- manufacturer: 制造商
|
|||
|
|
- type: 类型,默认为DC(直流)
|
|||
|
|
|
|||
|
|
**本文档引用的文件**
|
|||
|
|
|
|||
|
|
- [PileController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/PileController.java)
|
|||
|
|
- [PileCreateRequest.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/request/PileCreateRequest.java)
|
|||
|
|
|
|||
|
|
#### 查询充电桩列表
|
|||
|
|
|
|||
|
|
- **HTTP方法**: GET
|
|||
|
|
- **URL路径**: `/api/piles`
|
|||
|
|
- **请求头**: `Authorization: Bearer <JWT>`
|
|||
|
|
- **查询参数**: 继承自`PageRequest`
|
|||
|
|
- **响应体**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"errorCode": "SUCCESS",
|
|||
|
|
"message": "查询成功",
|
|||
|
|
"data": {
|
|||
|
|
"content": [
|
|||
|
|
{
|
|||
|
|
"id": "uuid",
|
|||
|
|
"pileName": "string",
|
|||
|
|
"pileCode": "string",
|
|||
|
|
"protocol": "string",
|
|||
|
|
"stationId": "uuid",
|
|||
|
|
"brand": "string",
|
|||
|
|
"model": "string",
|
|||
|
|
"manufacturer": "string",
|
|||
|
|
"type": "DC",
|
|||
|
|
"status": "string"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"totalElements": 1,
|
|||
|
|
"totalPages": 1,
|
|||
|
|
"page": 1,
|
|||
|
|
"size": 10
|
|||
|
|
},
|
|||
|
|
"timestamp": 1700000000000
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 充电枪管理
|
|||
|
|
|
|||
|
|
#### 创建充电枪
|
|||
|
|
|
|||
|
|
- **HTTP方法**: POST
|
|||
|
|
- **URL路径**: `/api/guns`
|
|||
|
|
- **请求头**: `Authorization: Bearer <JWT>`
|
|||
|
|
- **请求体**: `GunCreateRequest`
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"gunName": "string",
|
|||
|
|
"gunNo": "string",
|
|||
|
|
"gunCode": "string",
|
|||
|
|
"stationId": "uuid",
|
|||
|
|
"pileId": "uuid"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
- **字段说明**:
|
|||
|
|
- gunName: 充电枪名称,必填,不能为空
|
|||
|
|
- gunNo: 充电枪编号,必填,不能为空
|
|||
|
|
- gunCode: 充电枪编码,必填,不能为空
|
|||
|
|
- stationId: 所属充电站ID,必填,不能为空
|
|||
|
|
- pileId: 所属充电桩ID,必填,不能为空
|
|||
|
|
|
|||
|
|
**本文档引用的文件**
|
|||
|
|
|
|||
|
|
- [GunController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/GunController.java)
|
|||
|
|
- [GunCreateRequest.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/request/GunCreateRequest.java)
|
|||
|
|
|
|||
|
|
## 协议交互API
|
|||
|
|
|
|||
|
|
提供协议相关的查询接口。
|
|||
|
|
|
|||
|
|
### 获取支持的协议列表
|
|||
|
|
|
|||
|
|
- **HTTP方法**: GET
|
|||
|
|
- **URL路径**: `/api/protocols/supported`
|
|||
|
|
- **请求头**: `Authorization: Bearer <JWT>`
|
|||
|
|
- **响应体**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"errorCode": "SUCCESS",
|
|||
|
|
"message": "查询成功",
|
|||
|
|
"data": [
|
|||
|
|
{
|
|||
|
|
"value": "LVNENG_V340",
|
|||
|
|
"label": "绿能V3.4.0"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"value": "YUNKUAICHONG_V150",
|
|||
|
|
"label": "云快充V1.5.0"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"timestamp": 1700000000000
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**本文档引用的文件**
|
|||
|
|
|
|||
|
|
- [ProtocolController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/ProtocolController.java)
|
|||
|
|
|
|||
|
|
## 远程过程调用API
|
|||
|
|
|
|||
|
|
提供通用化的充电桩下行指令接口。
|
|||
|
|
|
|||
|
|
### 单向RPC
|
|||
|
|
|
|||
|
|
- **HTTP方法**: POST
|
|||
|
|
- **URL路径**: `/api/rpc/oneway`
|
|||
|
|
- **请求头**: `Authorization: Bearer <JWT>`
|
|||
|
|
- **请求体**: `RpcRequest`
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"method": "string",
|
|||
|
|
"parameter": {},
|
|||
|
|
"timeoutMs": 10000
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
- **字段说明**:
|
|||
|
|
- method: RPC方法名,必填,不能为空
|
|||
|
|
- parameter: 方法参数,JSON格式,必填,不能为空
|
|||
|
|
- timeoutMs: 超时时间(毫秒),仅用于双向RPC
|
|||
|
|
|
|||
|
|
**本文档引用的文件**
|
|||
|
|
|
|||
|
|
- [RpcController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/RpcController.java)
|
|||
|
|
- [RpcRequest.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/request/RpcRequest.java)
|
|||
|
|
|
|||
|
|
#### 支持的方法
|
|||
|
|
|
|||
|
|
| 方法名 | 说明 | 参数结构 |
|
|||
|
|
|--------------------------|---------|-----------------------------------|
|
|||
|
|
| startCharge | 启动充电 | `StartChargeDTO` |
|
|||
|
|
| stopCharge | 停止充电 | `StopChargeDTO` |
|
|||
|
|
| restartPile | 重启充电桩 | `RestartPileDTO` |
|
|||
|
|
| setPricing | 设置计费策略 | `SetPricingDTO` |
|
|||
|
|
| setQrcode | 设置二维码 | `SetQrcodeRequest` |
|
|||
|
|
| otaRequest | OTA升级 | `OtaRequest` |
|
|||
|
|
| offlineCardBalanceUpdate | 离线卡余额更新 | `OfflineCardBalanceUpdateRequest` |
|
|||
|
|
| offlineCardSync | 离线卡同步 | `OfflineCardSyncRequest` |
|
|||
|
|
| offlineCardClear | 离线卡清除 | `OfflineCardClearRequest` |
|
|||
|
|
| offlineCardQuery | 离线卡查询 | `OfflineCardQueryRequest` |
|
|||
|
|
| timeSync | 时间同步 | `TimeSyncDTO` |
|
|||
|
|
|
|||
|
|
### 启动充电示例
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"method": "startCharge",
|
|||
|
|
"parameter": {
|
|||
|
|
"pileCode": "P001",
|
|||
|
|
"gunNo": "G01",
|
|||
|
|
"limitYuan": 100.00,
|
|||
|
|
"orderNo": "ORDER_001",
|
|||
|
|
"logicalCardNo": "LOGICAL_001",
|
|||
|
|
"physicalCardNo": "PHYSICAL_001",
|
|||
|
|
"parallelNo": "PARALLEL_001"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**本文档引用的文件**
|
|||
|
|
|
|||
|
|
- [StartChargeDTO.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/dto/StartChargeDTO.java)
|
|||
|
|
|
|||
|
|
## curl命令示例
|
|||
|
|
|
|||
|
|
以下是一些常用的curl命令示例,演示如何使用API。
|
|||
|
|
|
|||
|
|
### 登录
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST "http://localhost:8080/api/auth/login" \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{
|
|||
|
|
"username": "admin",
|
|||
|
|
"password": "password"
|
|||
|
|
}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 查询电站列表
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X GET "http://localhost:8080/api/stations?page=1&size=10" \
|
|||
|
|
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 下发启动充电指令
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST "http://localhost:8080/api/rpc/oneway" \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
|
|||
|
|
-d '{
|
|||
|
|
"method": "startCharge",
|
|||
|
|
"parameter": {
|
|||
|
|
"pileCode": "P001",
|
|||
|
|
"gunNo": "G01",
|
|||
|
|
"limitYuan": 100.00,
|
|||
|
|
"orderNo": "ORDER_001"
|
|||
|
|
}
|
|||
|
|
}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**本文档引用的文件**
|
|||
|
|
|
|||
|
|
- [UserController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/UserController.java)
|
|||
|
|
- [StationController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/StationController.java)
|
|||
|
|
- [RpcController.java](file://jcpp-app/src/main/java/sanbing/jcpp/app/adapter/controller/RpcController.java)
|