第三阶段核心业务开发完成

This commit is contained in:
2025-05-17 21:51:04 +08:00
parent 5ea13d6dea
commit 53f7fee73a
50 changed files with 3465 additions and 153 deletions

View File

@@ -11,14 +11,73 @@
## 2. 后端开发详解
1. **数据库初始化**:
* **创建 `charging_robot`, `parking_spot`, `charging_session` 表**: 执行 `development_plan.md` 中定义的相应 DDL 语句。
* **创建 `charging_robot`, `parking_spot`, `charging_session` 表**: 执行以下 DDL 语句。
```sql
-- (DDL for charging_robot)
CREATE TABLE `charging_robot` (...) COMMENT='充电机器人表';
-- (DDL for parking_spot)
CREATE TABLE `parking_spot` (...) COMMENT='车位表';
-- (DDL for charging_session)
CREATE TABLE `charging_session` (...) COMMENT='充电记录表';
-- DDL for charging_robot
CREATE TABLE `charging_robot` (
`id` BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
`robot_uid` VARCHAR(100) NOT NULL UNIQUE COMMENT '机器人唯一标识符 (例如,硬件序列号)',
`status` VARCHAR(50) NOT NULL DEFAULT 'IDLE' COMMENT '机器人状态 (IDLE, MOVING, CHARGING, ERROR, MAINTENANCE, OFFLINE)',
`current_location` VARCHAR(255) COMMENT '当前位置描述 (例如坐标或区域ID)',
`battery_level` TINYINT UNSIGNED COMMENT '电池电量百分比 (0-100)',
`current_task_id` BIGINT COMMENT '当前执行的任务ID (关联 robot_task.id)',
`last_heartbeat_time` DATETIME COMMENT '最后心跳时间',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
`is_deleted` TINYINT(1) DEFAULT 0 COMMENT '逻辑删除标志 (0:未删, 1:已删)'
) COMMENT='充电机器人表';
-- (索引建议,可根据实际查询需求调整)
-- CREATE INDEX `idx_robot_uid` ON `charging_robot` (`robot_uid`);
-- CREATE INDEX `idx_robot_status` ON `charging_robot` (`status`);
-- DDL for parking_spot
CREATE TABLE `parking_spot` (
`id` BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
`spot_uid` VARCHAR(100) NOT NULL UNIQUE COMMENT '车位唯一标识符 (例如,车位号)',
`status` VARCHAR(50) NOT NULL DEFAULT 'AVAILABLE' COMMENT '车位状态 (AVAILABLE, OCCUPIED_BY_CAR, RESERVED, CHARGING, MAINTENANCE, UNAVAILABLE)',
`location_description` VARCHAR(255) COMMENT '位置描述 (例如,楼层、区域)',
`robot_assignable` BOOLEAN DEFAULT TRUE COMMENT '此车位是否可指派机器人前往',
`current_session_id` BIGINT COMMENT '当前占用此车位的充电会话ID (关联 charging_session.id)',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
`is_deleted` TINYINT(1) DEFAULT 0 COMMENT '逻辑删除标志 (0:未删, 1:已删)'
) COMMENT='车位表';
-- (索引建议)
-- CREATE INDEX `idx_spot_uid` ON `parking_spot` (`spot_uid`);
-- CREATE INDEX `idx_spot_status` ON `parking_spot` (`status`);
-- DDL for charging_session
CREATE TABLE `charging_session` (
`id` BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID充电会话唯一标识',
`user_id` BIGINT NOT NULL COMMENT '用户ID (关联 user.id)',
`robot_id` BIGINT COMMENT '服务的机器人ID (关联 charging_robot.id)',
`robot_uid_snapshot` VARCHAR(100) COMMENT '服务机器人的UID快照 (冗余字段,方便查询历史)',
`spot_id` BIGINT NOT NULL COMMENT '车位ID (关联 parking_spot.id)',
`spot_uid_snapshot` VARCHAR(100) NOT NULL COMMENT '车位UID快照 (冗余字段)',
`status` VARCHAR(50) NOT NULL DEFAULT 'REQUESTED' COMMENT '充电会话状态 (REQUESTED, ROBOT_ASSIGNED, ROBOT_MOVING, CHARGING_STARTED, CHARGING_IN_PROGRESS, COMPLETED, CANCELLED_BY_USER, CANCELLED_BY_SYSTEM, ERROR, ROBOT_TASK_TIMEOUT)',
`request_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '用户请求充电时间',
`robot_assigned_time` DATETIME COMMENT '机器人分配时间',
`robot_arrival_time` DATETIME COMMENT '机器人到达车位时间',
`charge_start_time` DATETIME COMMENT '充电开始时间',
`charge_end_time` DATETIME COMMENT '充电结束时间',
`total_duration_seconds` INT COMMENT '总充电时长 (秒)',
`energy_consumed_kwh` DECIMAL(10, 3) COMMENT '消耗电量 (kWh)',
`cost` DECIMAL(10, 2) COMMENT '本次充电费用 (元)',
`payment_status` VARCHAR(50) DEFAULT 'PENDING' COMMENT '支付状态 (PENDING, PAID, FAILED)',
`error_code` VARCHAR(100) COMMENT '错误码 (如果会话出错)',
`error_message` TEXT COMMENT '错误信息',
`related_robot_task_id` BIGINT COMMENT '启动本次会话或关键步骤的 RobotTask ID',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
`is_deleted` TINYINT(1) DEFAULT 0 COMMENT '逻辑删除标志 (0:未删, 1:已删)'
) COMMENT='充电记录表';
-- (外键约束和索引建议)
-- ALTER TABLE `charging_session` ADD CONSTRAINT `fk_session_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`);
-- CREATE INDEX `idx_session_user` ON `charging_session` (`user_id`);
-- ... (其他索引)
```
2. **机器人与车位管理 (可选,主要面向管理员)**:
* **Entity**: 创建 `ChargingRobot.java`, `ParkingSpot.java`。