电梯交通量仿真分析4
4. 接口设计
4.1 RESTful API设计规范
本系统遵循RESTful设计原则,采用JSON作为数据交换格式,使用标准HTTP状态码表示操作结果。所有API均以/api/v1为前缀,确保版本兼容性。
通用响应结构
{
"status": "SUCCESS|ERROR|VALIDATION_ERROR",
"code": "HTTP状态码",
"message": "操作结果描述",
"data": {
// 具体业务数据
},
"timestamp": "ISO 8601格式的时间戳"
}错误处理
- 400 Bad Request: 请求参数验证失败
- 401 Unauthorized: 未授权访问
- 404 Not Found: 资源不存在
- 422 Unprocessable Entity: 业务逻辑验证失败
- 500 Internal Server Error: 服务器内部错误
4.2 核心API接口设计
4.2.1 仿真执行API
端点: POST /api/v1/simulate
功能: 执行电梯交通仿真,返回关键指标和仿真ID
请求体:
{
"buildingConfig": {
"name": "办公大楼A",
"totalFloors": 30,
"floorHeight": 4.0,
"buildingType": "OFFICE",
"floors": [
{
"floorNumber": 1,
"usage": "LOBBY",
"population": 0,
"timePeriods": {
"MORNING_PEAK": {
"incomingTrafficRatio": 0.8,
"outgoingTrafficRatio": 0.0,
"interfloorTrafficRatio": 0.2,
"batchProfile": {
"batchProbability": 0.7,
"batchSizeDistribution": [
{"batchSize": 1, "probability": 0.3},
{"batchSize": 2, "probability": 0.4},
{"batchSize": 3, "probability": 0.2},
{"batchSize": 4, "probability": 0.1}
],
"interArrivalMean": 5.0,
"interArrivalStdDev": 2.0
}
}
}
}
]
},
"elevatorGroups": [
{
"controlType": "DESTINATION_CONTROL",
"elevators": [
{
"capacity": 16,
"ratedSpeed": 3.0,
"acceleration": 1.0,
"deceleration": 1.0,
"doorWidth": 1.0,
"standbyFloor": 1,
"serviceFloors": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
}
]
}
],
"simulationConfig": {
"duration": 3600,
"timeSlice": 5,
"startTime": "08:00",
"endTime": "09:00",
"odMatrixEstimationMethod": "BILS"
}
}成功响应示例:
{
"status": "SUCCESS",
"code": 200,
"message": "Simulation started successfully",
"data": {
"simulationId": "sim-7d8e9f0a-1b2c-3d4e-5f6a-7b8c9d0e1f2a",
"startTime": "2023-08-01T08:00:00Z",
"estimatedCompletionTime": "2023-08-01T08:00:15Z",
"keyMetrics": {
"averageWaitingTime": 23.5,
"maxWaitingTime": 65.2,
"averageTravelTime": 45.8,
"handlingCapacity": 18.3
}
},
"timestamp": "2023-08-01T07:59:45Z"
}验证错误响应示例:
{
"status": "VALIDATION_ERROR",
"code": 400,
"message": "Invalid simulation configuration",
"data": {
"errors": [
{
"field": "elevatorGroups[0].elevators[0].serviceFloors",
"message": "Service floors must include standby floor (1)"
}
]
},
"timestamp": "2023-08-01T07:59:45Z"
}4.2.2 仿真状态查询API
端点: GET /api/v1/simulations/{id}
功能: 查询仿真状态和进度
成功响应示例:
{
"status": "SUCCESS",
"code": 200,
"message": "Simulation status retrieved successfully",
"data": {
"simulationId": "sim-7d8e9f0a-1b2c-3d4e-5f6a-7b8c9d0e1f2a",
"status": "RUNNING|COMPLETED|FAILED",
"progress": 75.5,
"startTime": "2023-08-01T08:00:00Z",
"endTime": null,
"duration": 3600,
"keyMetrics": {
"averageWaitingTime": 23.5,
"maxWaitingTime": 65.2,
"averageTravelTime": 45.8,
"handlingCapacity": 18.3
}
},
"timestamp": "2023-08-01T08:00:45Z"
}4.2.3 时间切片数据API
端点: GET /api/v1/simulations/{id}/timeline
功能: 按时间切片获取电梯和乘客数据,用于前端动画展示
查询参数:
fromTime: 开始时间(秒),默认为0toTime: 结束时间(秒),默认为仿真总时长timeSlice: 时间切片大小(秒),默认为5
成功响应示例:
{
"status": "SUCCESS",
"code": 200,
"message": "Timeline data retrieved successfully",
"data": {
"simulationId": "sim-7d8e9f0a-1b2c-3d4e-5f6a-7b8c9d0e1f2a",
"timeSlice": 5,
"timeline": [
{
"time": 0,
"elevators": [
{
"id": "elevator-1",
"position": 0.0,
"floor": 1,
"direction": "STOPPED",
"doorOpen": false,
"passengerCount": 0,
"registeredStops": []
}
],
"passengerEvents": []
},
{
"time": 5,
"elevators": [
{
"id": "elevator-1",
"position": 4.0,
"floor": 2,
"direction": "UP",
"doorOpen": false,
"passengerCount": 3,
"registeredStops": [5, 8, 10]
}
],
"passengerEvents": [
{
"type": "BOARDING",
"passengerId": "P-123",
"elevatorId": "elevator-1",
"floor": 2,
"timestamp": 5
}
]
}
]
},
"timestamp": "2023-08-01T08:05:30Z"
}关键实现细节:
- 时间切片数据按配置的时间间隔(1秒/5秒/30秒)生成
- 电梯状态包含精确位置(米)、当前楼层、运行方向、门状态等
- 乘客事件包含上车、下车、等待等关键事件
- 数据结构优化,便于前端动画渲染
4.2.4 仿真结果API
端点: GET /api/v1/simulations/{id}/results
功能: 获取完整仿真结果,包括所有性能指标
成功响应示例:
{
"status": "SUCCESS",
"code": 200,
"message": "Simulation results retrieved successfully",
"data": {
"simulationId": "sim-7d8e9f0a-1b2c-3d4e-5f6a-7b8c9d0e1f2a",
"building": {
"name": "办公大楼A",
"totalFloors": 30,
"floorHeight": 4.0,
"buildingType": "OFFICE"
},
"waitingTimeMetrics": {
"overall": {
"average": 23.5,
"max": 65.2,
"min": 5.3,
"stdDev": 12.4,
"percentiles": [5.3, 12.1, 16.7, 20.3, 23.5, 26.8, 31.2, 38.5, 45.6, 65.2]
},
"byFloor": {
"1": {
"average": 18.2,
"max": 45.3,
"min": 5.3,
"stdDev": 8.7,
"percentiles": [5.3, 12.1, 14.7, 16.3, 18.2, 20.8, 24.2, 30.5, 36.6, 45.3]
},
"2": {
"average": 25.7,
"max": 65.2,
"min": 8.3,
"stdDev": 14.2,
"percentiles": [8.3, 15.1, 19.7, 23.3, 25.7, 29.8, 34.2, 41.5, 48.6, 65.2]
}
},
"byTimePeriod": {
"MORNING_PEAK": {
"average": 28.3,
"max": 65.2,
"min": 7.3,
"stdDev": 15.2
},
"NORMAL": {
"average": 15.2,
"max": 35.7,
"min": 5.3,
"stdDev": 6.8
}
}
},
"travelTimeMetrics": {
"overall": {
"average": 45.8,
"max": 98.5,
"min": 15.2,
"stdDev": 20.3,
"percentiles": [15.2, 28.1, 34.7, 40.3, 45.8, 51.8, 58.2, 67.5, 76.6, 98.5]
}
},
"systemPerformance": {
"handlingCapacity": 18.3,
"elevatorUtilization": {
"elevator-1": 78.5,
"elevator-2": 65.2,
"elevator-3": 82.7
},
"averageStopsPerTrip": 3.2,
"energyConsumption": 125.7
}
},
"timestamp": "2023-08-01T08:10:15Z"
}关键指标说明:
等待时间指标:
- 最坏/平均等待时间及明细(按楼层、时间段)
- 乘客等待时间分布(百分位数)
- 高峰时段等待时间分析
运输时间指标:
- 最坏/平均运输时间及明细
- 乘客运输时间分布
- 门到门时间分析
系统性能指标:
- 5分钟输送能力(%)
- 电梯利用率
- 平均停站次数
- 能耗估算
4.2.5 PDF报告生成API
端点: GET /api/v1/simulations/{id}/report
功能: 生成PDF格式的仿真报告
查询参数:
reportType: 报告类型(BASIC, DETAILED, COMPARATIVE),默认为DETAILEDincludeCharts: 是否包含图表(true/false),默认为true
成功响应:
- HTTP 200 OK
- Content-Type: application/pdf
- 响应体为PDF文件二进制数据
报告内容结构:
执行摘要:
- 仿真基本信息
- 关键性能指标概览
- 主要发现
详细性能分析:
- 等待时间分布图表
- 运输时间分布图表
- 电梯利用率热力图
- 5分钟输送能力分析
控制策略对比(仅当比较多种策略时):
- 不同控制方式的性能对比
- 统计显著性分析
- 推荐策略
优化建议:
- 电梯配置优化建议
- 控制策略改进建议
- 建筑布局优化建议
4.2.6 OD矩阵估计API
端点: POST /api/v1/od-matrix/estimate
功能: 估计电梯行程的OD矩阵
请求体:
{
"elevatorTrips": [
{
"tripId": "trip-1",
"elevatorId": "elevator-1",
"startTime": "2023-08-01T08:00:00Z",
"endTime": "2023-08-01T08:01:30Z",
"stops": [
{"floor": 1, "arrivalTime": "2023-08-01T08:00:00Z", "departureTime": "2023-08-01T08:00:10Z", "boardingCount": 5, "alightingCount": 0},
{"floor": 5, "arrivalTime": "2023-08-01T08:00:20Z", "departureTime": "2023-08-01T08:00:30Z", "boardingCount": 2, "alightingCount": 3},
{"floor": 10, "arrivalTime": "2023-08-01T08:00:45Z", "departureTime": "2023-08-01T08:00:55Z", "boardingCount": 0, "alightingCount": 4}
]
}
],
"building": {
"totalFloors": 30
},
"estimationMethod": "BILS",
"withRandomization": true
}成功响应示例:
{
"status": "SUCCESS",
"code": 200,
"message": "OD matrix estimated successfully",
"data": {
"odMatrix": [
{"origin": 1, "destination": 5, "passengerCount": 3, "probability": 0.15},
{"origin": 1, "destination": 10, "passengerCount": 2, "probability": 0.10},
{"origin": 5, "destination": 10, "passengerCount": 1, "probability": 0.05},
{"origin": 5, "destination": 1, "passengerCount": 3, "probability": 0.15}
],
"validation": {
"isValid": true,
"issues": []
},
"computationTime": 152,
"isRoundedSolution": false
},
"timestamp": "2023-08-01T08:15:30Z"
}关键实现细节:
- 实现PDF中描述的LP、BILS、CP三种OD矩阵估计方法
- 支持随机化搜索以提高统计质量
- 提供详细的验证结果,确保OD矩阵满足流量守恒原则
- 返回计算时间和解的类型信息
4.3 API安全设计
4.3.1 认证与授权
- 使用JWT(JSON Web Token)进行身份验证
- 基于角色的访问控制(RBAC):
- ADMIN: 可执行所有操作
- ENGINEER: 可执行仿真和查看结果
- VIEWER: 仅可查看结果
4.3.2 速率限制
- 免费用户: 10请求/分钟
- 专业用户: 100请求/分钟
- 企业用户: 无限制
4.3.3 数据验证
- 所有输入参数进行严格验证
- 业务规则验证(如电梯服务楼层必须包含基准层)
- 防止无效的仿真配置
4.3.4 审计日志
- 记录所有API调用
- 包含用户、时间、操作和结果
- 用于安全审计和问题排查
4.4 API性能优化
4.4.1 缓存策略
- 仿真结果缓存: 24小时
- OD矩阵估计结果缓存: 1小时
- 使用Redis作为缓存层
4.4.2 异步处理
- 长时间仿真任务使用异步处理
- 客户端通过Websocket接收进度更新
- 提供任务取消功能
4.4.3 数据压缩
- 大型响应数据使用GZIP压缩
- 时间切片数据使用二进制格式选项
- 提供数据采样选项
4.4.4 分页与过滤
- 大型结果集支持分页
- 时间切片数据支持时间范围过滤
- 结果指标支持按楼层、时间段过滤