Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
smart_hotel_app
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张宏
smart_hotel_app
Commits
749feeaf
Commit
749feeaf
authored
Jun 10, 2026
by
张宏
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
3
parent
378c338a
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
128 additions
and
20 deletions
+128
-20
room_repository.dart
lib/repositories/room_repository.dart
+17
-0
room_service.dart
lib/services/room_service.dart
+17
-0
service_index_cubit.dart
lib/views/service/index/cubit/service_index_cubit.dart
+42
-8
service_index_state.dart
lib/views/service/index/cubit/service_index_state.dart
+11
-0
room_management_block.dart
lib/views/service/index/widget/room_management_block.dart
+36
-7
对接方案.md
对接方案.md
+5
-5
No files found.
lib/repositories/room_repository.dart
View file @
749feeaf
...
...
@@ -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
lib/services/room_service.dart
View file @
749feeaf
...
...
@@ -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
lib/views/service/index/cubit/service_index_cubit.dart
View file @
749feeaf
...
...
@@ -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
lib/views/service/index/cubit/service_index_state.dart
View file @
749feeaf
...
...
@@ -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
lib/views/service/index/widget/room_management_block.dart
View file @
749feeaf
...
...
@@ -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
(
...
...
对接方案.md
View file @
749feeaf
# 智慧酒
店 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 | 未对接 | 客房详情 | |
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment