track_repository.dart 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import 'dart:convert';
  2. import 'package:dio/dio.dart';
  3. import 'package:injectable/injectable.dart';
  4. import 'package:location/base/app_base_request.dart';
  5. import 'package:location/data/api/atmob_api.dart';
  6. import 'package:location/data/api/atmob_stream_api.dart';
  7. import '../../base/base_response.dart';
  8. import '../../di/get_it.dart';
  9. import '../../utils/http_handler.dart';
  10. import '../../utils/sse_parse_util.dart';
  11. import '../api/request/query_track_request.dart';
  12. import '../api/response/location_track_days_response.dart';
  13. import '../api/response/query_track_response.dart';
  14. import '../api/response/track_daily_summary_response.dart';
  15. import '../bean/track_daily_bean.dart';
  16. import '../bean/track_days.dart';
  17. @lazySingleton
  18. class TrackRepository {
  19. final AtmobApi atmobApi;
  20. final AtmobStreamApi streamApi;
  21. List<TrackDays>? days;
  22. TrackRepository(this.atmobApi, this.streamApi);
  23. static TrackRepository getInstance() {
  24. return getIt.get<TrackRepository>();
  25. }
  26. Future<QueryTrackResponse> queryVirtualTrack() {
  27. return atmobApi
  28. .queryVirtualTrack(AppBaseRequest())
  29. .then(HttpHandler.handle(true));
  30. }
  31. Future<QueryTrackResponse> queryTrack(
  32. {required int? startTime,
  33. required int? endTime,
  34. required String? userId}) {
  35. return atmobApi
  36. .queryTrack(
  37. QueryTrackRequest(
  38. startTime: startTime, endTime: endTime, userId: userId),
  39. RequestOptions(
  40. receiveTimeout: Duration(seconds: 30),
  41. connectTimeout: Duration(minutes: 2)))
  42. .then(HttpHandler.handle(true));
  43. }
  44. ///试用期间上报查看轨迹次数
  45. Future<void> refreshMemberTrailTrack() {
  46. return atmobApi
  47. .memberTrailTrack(AppBaseRequest())
  48. .then(HttpHandler.handle(true));
  49. }
  50. Future<List<TrackDays>> getLocationTrackDays() async {
  51. if (days == null || days?.isEmpty == true) {
  52. final response = await _locationTrackDays();
  53. return response.days;
  54. } else {
  55. return days!;
  56. }
  57. }
  58. Future<LocationTrackDaysResponse> _locationTrackDays() {
  59. return atmobApi
  60. .locationTrackDays(AppBaseRequest())
  61. .then(HttpHandler.handle(false))
  62. .then((response) {
  63. days = response.days;
  64. return response;
  65. });
  66. }
  67. Future<List<TrackDailyBean>?> trackDailyQuery(
  68. {required int? startTime,
  69. required int? endTime,
  70. required String? userId}) {
  71. return atmobApi
  72. .trackDailyQuery(
  73. QueryTrackRequest(
  74. startTime: startTime, endTime: endTime, userId: userId),
  75. RequestOptions(
  76. receiveTimeout: Duration(seconds: 30),
  77. connectTimeout: Duration(minutes: 2)))
  78. .then(HttpHandler.handle(true))
  79. .then((response) {
  80. return response.trackDailyList;
  81. });
  82. }
  83. ///每日轨迹弹框报告-中台
  84. Future<TrackDailyDialogsResponse>locationTrackDailyDialogs() {
  85. return atmobApi
  86. .locationTrackDailyDialogs(AppBaseRequest())
  87. .then(HttpHandler.handle(true))
  88. .then((response) {
  89. return response;
  90. });
  91. }
  92. Future<TrackDailySummaryResponse> trackDailySummary(
  93. {required int? startTime,
  94. required int? endTime,
  95. required String? userId}) {
  96. return atmobApi
  97. .trackDailySummary(
  98. QueryTrackRequest(
  99. startTime: startTime, endTime: endTime, userId: userId),
  100. RequestOptions(
  101. receiveTimeout: Duration(seconds: 30),
  102. connectTimeout: Duration(minutes: 2)))
  103. .then(HttpHandler.handle(true));
  104. }
  105. Future<Stream<Message>> streamDailySummary(
  106. {required int? startTime,
  107. required int? endTime,
  108. required String? userId}) {
  109. return streamApi
  110. .dailySummary(QueryTrackRequest(
  111. startTime: startTime, endTime: endTime, userId: userId))
  112. .then((response) async {
  113. List<String>? contentType = response.headers['Content-Type'];
  114. if (contentType != null) {
  115. for (var value in contentType) {
  116. if (value.contains('text/event-stream')) {
  117. return response.stream;
  118. } else if (value.contains('application/json')) {
  119. BaseResponse<String> baseResponse = BaseResponse.fromJson(
  120. jsonDecode(await response.stream
  121. .map((bytes) => utf8.decoder.convert(bytes))
  122. .toList()
  123. .then((value) => value.join())),
  124. (json) => json as String);
  125. throw ServerErrorException(baseResponse.code, baseResponse.message);
  126. }
  127. }
  128. }
  129. throw Exception('Invalid content type');
  130. }).then((stream) => SSEParseUtil.parse(stream));
  131. }
  132. }