集成功能 暂停 取消功能 恢复功能的接口的领域层和数据层的开发 下一步待集成到页面上 优化功能,优化了接口异常和未知异常对页面渲染的影响对用户的体验的不好情况。具体通过弹窗友好提示! 优化更新了tcp指示灯点击出现机器状态中添加选中设备的编号 方便用户使用的明白明了!。 优化更新关闭了tcp重连操作内链条中的获取用户设备和切换设备操作项。 调整了获取无人机状态信息的更新频率 为14秒一次
189 lines
4.8 KiB
Dart
189 lines
4.8 KiB
Dart
import 'dart:convert';
|
|
import 'package:dio/dio.dart';
|
|
import 'package:get_it/get_it.dart';
|
|
import '../../../../core/logging/i_logger_service.dart';
|
|
import '../models/device_task_model.dart';
|
|
|
|
abstract class DeviceTaskDatasource {
|
|
Future<List<DeviceTaskModel>> getDeviceTaskPool({
|
|
required String userId,
|
|
required int siteId,
|
|
required int orgId,
|
|
int pageNum = 1,
|
|
int pageSize = 99999999,
|
|
});
|
|
|
|
Future<bool> cancelTask({
|
|
required String deviceId,
|
|
required int taskId,
|
|
required int orgId,
|
|
required int siteId,
|
|
});
|
|
|
|
Future<bool> pauseTask({
|
|
required String deviceId,
|
|
required int taskId,
|
|
required int orgId,
|
|
required int siteId,
|
|
});
|
|
|
|
Future<Map<String, dynamic>> recoveryTask({
|
|
required String deviceId,
|
|
required int taskId,
|
|
required int orgId,
|
|
required int siteId,
|
|
});
|
|
}
|
|
|
|
class DeviceTaskDatasourceImpl implements DeviceTaskDatasource {
|
|
final Dio dio;
|
|
final ILoggerService _logger = GetIt.I<ILoggerService>();
|
|
|
|
DeviceTaskDatasourceImpl(this.dio);
|
|
|
|
@override
|
|
Future<List<DeviceTaskModel>> getDeviceTaskPool({
|
|
required String userId,
|
|
required int siteId,
|
|
required int orgId,
|
|
int pageNum = 1,
|
|
int pageSize = 99999999,
|
|
}) async {
|
|
try {
|
|
final url = 'http://1.95.137.212:59015/iot/deviceTask/deviceTaskPool';
|
|
final response = await dio.get(
|
|
url,
|
|
queryParameters: {
|
|
'userId': userId,
|
|
'siteId': siteId,
|
|
'orgId': orgId,
|
|
'pageNum': pageNum,
|
|
'pageSize': pageSize,
|
|
},
|
|
);
|
|
|
|
if (response.statusCode == 200) {
|
|
final data = response.data as Map<String, dynamic>;
|
|
if (data['code'] == 200) {
|
|
final rows = data['rows'] as List? ?? [];
|
|
return rows
|
|
.map((item) => DeviceTaskModel.fromJson(item as Map<String, dynamic>))
|
|
.toList();
|
|
} else {
|
|
throw Exception(data['msg'] ?? '获取任务池失败');
|
|
}
|
|
} else {
|
|
throw Exception('HTTP ${response.statusCode}');
|
|
}
|
|
} catch (e) {
|
|
_logger.logWithLevel('❌ 获取任务池失败: $e');
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
@override
|
|
Future<bool> cancelTask({
|
|
required String deviceId,
|
|
required int taskId,
|
|
required int orgId,
|
|
required int siteId,
|
|
}) async {
|
|
try {
|
|
final url = 'http://1.95.137.212:59015/iot/deviceTask/cancelTask';
|
|
final response = await dio.post(
|
|
url,
|
|
data: {
|
|
'deviceId': deviceId,
|
|
'taskId': taskId,
|
|
'orgId': orgId,
|
|
'siteId': siteId,
|
|
},
|
|
);
|
|
|
|
if (response.statusCode == 200) {
|
|
final data = response.data as Map<String, dynamic>;
|
|
if (data['code'] == 200) {
|
|
return data['data'] as bool? ?? false;
|
|
} else {
|
|
throw Exception(data['msg'] ?? '取消任务失败');
|
|
}
|
|
} else {
|
|
throw Exception('HTTP ${response.statusCode}');
|
|
}
|
|
} catch (e) {
|
|
_logger.logWithLevel('❌ 取消任务失败: $e');
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
@override
|
|
Future<bool> pauseTask({
|
|
required String deviceId,
|
|
required int taskId,
|
|
required int orgId,
|
|
required int siteId,
|
|
}) async {
|
|
try {
|
|
final url = 'http://1.95.137.212:59015/iot/deviceTask/pauseTask';
|
|
final response = await dio.post(
|
|
url,
|
|
data: {
|
|
'deviceId': deviceId,
|
|
'taskId': taskId,
|
|
'orgId': orgId,
|
|
'siteId': siteId,
|
|
},
|
|
);
|
|
|
|
if (response.statusCode == 200) {
|
|
final data = response.data as Map<String, dynamic>;
|
|
if (data['code'] == 200) {
|
|
return data['data'] as bool? ?? false;
|
|
} else {
|
|
throw Exception(data['msg'] ?? '暂停任务失败');
|
|
}
|
|
} else {
|
|
throw Exception('HTTP ${response.statusCode}');
|
|
}
|
|
} catch (e) {
|
|
_logger.logWithLevel('❌ 暂停任务失败: $e');
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
@override
|
|
Future<Map<String, dynamic>> recoveryTask({
|
|
required String deviceId,
|
|
required int taskId,
|
|
required int orgId,
|
|
required int siteId,
|
|
}) async {
|
|
try {
|
|
final url = 'http://1.95.137.212:59015/iot/deviceTask/recoveryTask';
|
|
final response = await dio.post(
|
|
url,
|
|
data: {
|
|
'deviceId': deviceId,
|
|
'taskId': taskId,
|
|
'orgId': orgId,
|
|
'siteId': siteId,
|
|
},
|
|
);
|
|
|
|
if (response.statusCode == 200) {
|
|
final data = response.data as Map<String, dynamic>;
|
|
if (data['code'] == 200) {
|
|
return data['data'] as Map<String, dynamic>? ?? {};
|
|
} else {
|
|
throw Exception(data['msg'] ?? '恢复任务失败');
|
|
}
|
|
} else {
|
|
throw Exception('HTTP ${response.statusCode}');
|
|
}
|
|
} catch (e) {
|
|
_logger.logWithLevel('❌ 恢复任务失败: $e');
|
|
rethrow;
|
|
}
|
|
}
|
|
}
|