Commit 749feeaf authored by 张宏's avatar 张宏

3

parent 378c338a
......@@ -38,4 +38,20 @@ class RoomRepository {
},
);
}
/// 客房服务看板-送电
Future<ResponseModel> powerOn({required int deviceId}) {
return DioRequest.instance.post(
'/app/room/device/power/on',
data: {'deviceId': deviceId},
);
}
/// 客房服务看板-断电
Future<ResponseModel> powerOff({required int deviceId}) {
return DioRequest.instance.post(
'/app/room/device/power/off',
data: {'deviceId': deviceId},
);
}
}
\ No newline at end of file
......@@ -31,4 +31,20 @@ class RoomService {
}
throw Exception(result.msg);
}
/// 送电
Future<void> powerOn({required int deviceId}) async {
final result = await _repository.powerOn(deviceId: deviceId);
if (!result.success) {
throw Exception(result.msg);
}
}
/// 断电
Future<void> powerOff({required int deviceId}) async {
final result = await _repository.powerOff(deviceId: deviceId);
if (!result.success) {
throw Exception(result.msg);
}
}
}
\ No newline at end of file
......@@ -116,6 +116,7 @@ class ServiceIndexCubit extends Cubit<ServiceIndexState> {
}
return {
'roomId': rs.roomId,
'number': rs.roomNumber,
'status': displayStatus,
'type': '客房', // 默认类型,后续可通过楼层areas信息扩展
......@@ -162,15 +163,47 @@ class ServiceIndexCubit extends Cubit<ServiceIndexState> {
emit(state.copyWith(searchText: text));
}
void powerOnRoom(String roomNumber) {
// TODO: 对接 POST /app/room/device/power/on
// ignore: avoid_print
print('给 $roomNumber 号房送电');
Future<void> powerOnRoom(String roomNumber) async {
if (state.isPoweringOn || state.isPoweringOff) return;
emit(state.copyWith(isPoweringOn: true));
try {
final room = _findRoomByNumber(roomNumber);
if (room == null) {
throw Exception('未找到房间信息');
}
await _roomService.powerOn(deviceId: room['roomId'] as int);
emit(state.copyWith(isPoweringOn: false));
} catch (e) {
emit(state.copyWith(isPoweringOn: false));
rethrow;
}
}
void powerOffRoom(String roomNumber) {
// TODO: 对接 POST /app/room/device/power/off
// ignore: avoid_print
print('给 $roomNumber 号房断电');
Future<void> powerOffRoom(String roomNumber) async {
if (state.isPoweringOff || state.isPoweringOn) return;
emit(state.copyWith(isPoweringOff: true));
try {
final room = _findRoomByNumber(roomNumber);
if (room == null) {
throw Exception('未找到房间信息');
}
await _roomService.powerOff(deviceId: room['roomId'] as int);
emit(state.copyWith(isPoweringOff: false));
} catch (e) {
emit(state.copyWith(isPoweringOff: false));
rethrow;
}
}
/// 从缓存中根据房号查找房间数据
Map<String, dynamic>? _findRoomByNumber(String roomNumber) {
for (final rooms in _roomCache.values) {
for (final room in rooms) {
if (room['number'] == roomNumber) {
return room;
}
}
}
return null;
}
}
\ No newline at end of file
......@@ -14,6 +14,8 @@ class ServiceIndexState extends Equatable {
final List<Map<String, dynamic>> rooms;
final bool isLoading;
final String? error;
final bool isPoweringOn;
final bool isPoweringOff;
const ServiceIndexState({
this.pendingCount = 0,
......@@ -28,6 +30,8 @@ class ServiceIndexState extends Equatable {
this.rooms = const [],
this.isLoading = false,
this.error,
this.isPoweringOn = false,
this.isPoweringOff = false,
});
ServiceIndexState copyWith({
......@@ -44,6 +48,8 @@ class ServiceIndexState extends Equatable {
List<Map<String, dynamic>>? rooms,
bool? isLoading,
String? error,
bool? isPoweringOn,
bool? isPoweringOff,
}) {
return ServiceIndexState(
pendingCount: pendingCount ?? this.pendingCount,
......@@ -58,6 +64,8 @@ class ServiceIndexState extends Equatable {
rooms: rooms ?? this.rooms,
isLoading: isLoading ?? this.isLoading,
error: error ?? this.error,
isPoweringOn: isPoweringOn ?? this.isPoweringOn,
isPoweringOff: isPoweringOff ?? this.isPoweringOff,
);
}
......@@ -75,5 +83,7 @@ class ServiceIndexState extends Equatable {
rooms,
isLoading,
error,
isPoweringOn,
isPoweringOff,
];
}
\ No newline at end of file
......@@ -98,7 +98,9 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
),
),
),
_buildBottomButtons(cubit),
BlocBuilder<ServiceIndexCubit, ServiceIndexState>(
builder: (context, state) => _buildBottomButtons(cubit),
),
],
),
),
......@@ -459,6 +461,7 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
Widget _buildBottomButtons(ServiceIndexCubit cubit) {
final isRoomSelected = _selectedRoom != null;
final isProcessing = cubit.state.isPoweringOn || cubit.state.isPoweringOff;
return Row(
children: [
Expanded(
......@@ -473,9 +476,22 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
),
elevation: 0,
),
onPressed: isRoomSelected
? () {
cubit.powerOnRoom(_selectedRoom!);
onPressed: isRoomSelected && !isProcessing
? () async {
try {
await cubit.powerOnRoom(_selectedRoom!);
if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('送电成功')),
);
}
} catch (e) {
if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('送电失败: $e')),
);
}
}
}
: null,
child: Text(
......@@ -504,9 +520,22 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
),
elevation: 0,
),
onPressed: isRoomSelected
? () {
cubit.powerOffRoom(_selectedRoom!);
onPressed: isRoomSelected && !isProcessing
? () async {
try {
await cubit.powerOffRoom(_selectedRoom!);
if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('断电成功')),
);
}
} catch (e) {
if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('断电失败: $e')),
);
}
}
}
: null,
child: Text(
......
# 智慧酒店 App 接口对接方案
# 智慧酒店 App 接口对接方案
......@@ -210,11 +210,11 @@ class xxxBO extends Equatable {
----
| 客房服务看板-客房状态总览-楼层 |GET | /app/room/floor/areas | 对接 | 客房服务看板-客房状态总览-楼层 | |
| 客房服务看板-客房状态总览-房间list |GET | /app/room/status | 对接 | 客房服务看板-客房状态总览-房间list | |
| 客房服务看板-客房状态总览-楼层 |GET | /app/room/floor/areas | 对接 | 客房服务看板-客房状态总览-楼层 | |
| 客房服务看板-客房状态总览-房间list |GET | /app/room/status | 对接 | 客房服务看板-客房状态总览-房间list | |
| 客房服务看板-送电 |POST | /app/room/device/power/on | 对接 | 客房服务看板-送电 | |
| 客房服务看板-断电 |POST | /app/room/device/power/off | 对接 | 客房服务看板-断电 | |
| 客房服务看板-送电 |POST | /app/room/device/power/on | 对接 | 客房服务看板-送电 | |
| 客房服务看板-断电 |POST | /app/room/device/power/off | 对接 | 客房服务看板-断电 | |
| 客房详情 |GET | /app/room/detail | 未对接 | 客房详情 | |
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment