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