对接连续任务列表接口和连续任务下发,便捷操作中暂停任务的对接,底部导航tab项的设置根据用户角色显示和设置
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
import 'dart:convert';
|
||||
import 'package:dio/dio.dart';
|
||||
import '../../../../core/consts/http_api_consts.dart';
|
||||
import '../../../../core/logging/i_logger_service.dart';
|
||||
import '../../domain/entities/consecutive_task_request.dart';
|
||||
|
||||
class ConsecutiveTaskRemoteDatasource {
|
||||
ConsecutiveTaskRemoteDatasource(this.dio, this.logger);
|
||||
final Dio dio;
|
||||
final ILoggerService logger;
|
||||
|
||||
Future<void> create(ConsecutiveTaskRequest request) async {
|
||||
final body = {
|
||||
'deviceId': request.deviceId.trim(),
|
||||
'routeIds': request.routeIds,
|
||||
'orgId': request.orgId,
|
||||
'siteId': request.siteId,
|
||||
};
|
||||
final clock = Stopwatch()..start();
|
||||
final url = HttpApiConsts.createConsecutiveTask;
|
||||
logger.logWithLevel(
|
||||
'[区域下发] 请求: POST $url, 参数: ${jsonEncode(body)}',
|
||||
shouldLog: true,
|
||||
);
|
||||
try {
|
||||
final response = await dio.post(
|
||||
url,
|
||||
data: body,
|
||||
options: Options(
|
||||
sendTimeout: const Duration(seconds: 20),
|
||||
receiveTimeout: const Duration(seconds: 20),
|
||||
),
|
||||
);
|
||||
final data = response.data;
|
||||
logger.logWithLevel(
|
||||
'[区域下发] 响应: HTTP ${response.statusCode}, ${jsonEncode(data)}, 耗时=${clock.elapsedMilliseconds}ms',
|
||||
shouldLog: true,
|
||||
);
|
||||
if (response.statusCode != 200 ||
|
||||
data is! Map ||
|
||||
'${data['code']}' != '200') {
|
||||
throw Exception(data is Map ? data['msg'] ?? '区域任务下发失败' : '区域任务响应格式错误');
|
||||
}
|
||||
final result = data['data'];
|
||||
// data: 1 是成功结果,不能按 bool 强转。
|
||||
if (result == false || result is num && result <= 0) {
|
||||
throw Exception('区域任务未下发成功,请查看接口响应');
|
||||
}
|
||||
logger.logWithLevel(
|
||||
'[区域下发] 成功: deviceId=${request.deviceId}, routeIds=${request.routeIds}',
|
||||
shouldLog: true,
|
||||
);
|
||||
} catch (error) {
|
||||
logger.logWithLevel(
|
||||
'[区域下发] 异常: $error, 耗时=${clock.elapsedMilliseconds}ms',
|
||||
shouldLog: true,
|
||||
);
|
||||
rethrow;
|
||||
} finally {
|
||||
clock.stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
import 'package:fpdart/fpdart.dart';
|
||||
import '../../../../core/error/failure.dart';
|
||||
import '../../domain/entities/consecutive_task_request.dart';
|
||||
import '../../domain/repositories/consecutive_task_repository.dart';
|
||||
import '../datasources/consecutive_task_remote_datasource.dart';
|
||||
|
||||
class ConsecutiveTaskRepositoryImpl implements ConsecutiveTaskRepository {
|
||||
ConsecutiveTaskRepositoryImpl(this.remote);
|
||||
final ConsecutiveTaskRemoteDatasource remote;
|
||||
|
||||
@override
|
||||
Future<Either<Failure, Unit>> create(ConsecutiveTaskRequest request) async {
|
||||
try {
|
||||
await remote.create(request);
|
||||
return const Right(unit);
|
||||
} catch (error) {
|
||||
return Left(Failure(error.toString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user