track_repository.dart 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  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/request/track_daily_action_request.dart';
  13. import '../api/response/location_track_days_response.dart';
  14. import '../api/response/query_track_response.dart';
  15. import '../api/response/track_daily_action_response.dart';
  16. import '../api/response/track_daily_dialogs_response.dart';
  17. import '../api/response/track_daily_summary_response.dart';
  18. import '../bean/track_daily_bean.dart';
  19. import '../bean/track_days.dart';
  20. @lazySingleton
  21. class TrackRepository {
  22. final AtmobApi atmobApi;
  23. final AtmobStreamApi streamApi;
  24. List<TrackDays>? days;
  25. TrackRepository(this.atmobApi, this.streamApi);
  26. static TrackRepository getInstance() {
  27. return getIt.get<TrackRepository>();
  28. }
  29. Future<QueryTrackResponse> queryVirtualTrack() {
  30. return atmobApi
  31. .queryVirtualTrack(AppBaseRequest())
  32. .then(HttpHandler.handle(true));
  33. }
  34. Future<QueryTrackResponse> queryTrack(
  35. {required int? startTime,
  36. required int? endTime,
  37. required String? userId}) {
  38. return atmobApi
  39. .queryTrack(
  40. QueryTrackRequest(
  41. startTime: startTime, endTime: endTime, userId: userId),
  42. RequestOptions(
  43. receiveTimeout: Duration(seconds: 30),
  44. connectTimeout: Duration(minutes: 2)))
  45. .then(HttpHandler.handle(true));
  46. }
  47. ///试用期间上报查看轨迹次数
  48. Future<void> refreshMemberTrailTrack() {
  49. return atmobApi
  50. .memberTrailTrack(AppBaseRequest())
  51. .then(HttpHandler.handle(true));
  52. }
  53. Future<List<TrackDays>> getLocationTrackDays() async {
  54. if (days == null || days?.isEmpty == true) {
  55. final response = await _locationTrackDays();
  56. return response.days;
  57. } else {
  58. return days!;
  59. }
  60. }
  61. Future<LocationTrackDaysResponse> _locationTrackDays() {
  62. return atmobApi
  63. .locationTrackDays(AppBaseRequest())
  64. .then(HttpHandler.handle(false))
  65. .then((response) {
  66. days = response.days;
  67. return response;
  68. });
  69. }
  70. Future<List<TrackDailyBean>?> trackDailyQuery(
  71. {required int? startTime,
  72. required int? endTime,
  73. required String? userId}) {
  74. return atmobApi
  75. .trackDailyQuery(
  76. QueryTrackRequest(
  77. startTime: startTime, endTime: endTime, userId: userId),
  78. RequestOptions(
  79. receiveTimeout: Duration(seconds: 30),
  80. connectTimeout: Duration(minutes: 2)))
  81. .then(HttpHandler.handle(true))
  82. .then((response) {
  83. return response.trackDailyList;
  84. });
  85. }
  86. ///每日轨迹弹框报告-中台
  87. Future<TrackDailyDialogsResponse> locationTrackDailyDialogs() {
  88. return atmobApi
  89. .locationTrackDailyDialogs(AppBaseRequest())
  90. .then(HttpHandler.handle(true))
  91. .then((response) {
  92. return response;
  93. });
  94. }
  95. Future<TrackDailySummaryResponse> trackDailySummary(
  96. {required int? startTime,
  97. required int? endTime,
  98. required String? userId}) {
  99. return atmobApi
  100. .trackDailySummary(
  101. QueryTrackRequest(
  102. startTime: startTime, endTime: endTime, userId: userId),
  103. RequestOptions(
  104. receiveTimeout: Duration(seconds: 30),
  105. connectTimeout: Duration(minutes: 2)))
  106. .then(HttpHandler.handle(true));
  107. }
  108. Future<TrackDailyActionResponse> trackDailyAction(String? userId) {
  109. return atmobApi
  110. .trackDailyAction(
  111. TrackDailyActionRequest(userId),
  112. RequestOptions(
  113. receiveTimeout: Duration(seconds: 30),
  114. connectTimeout: Duration(minutes: 2)))
  115. .then(HttpHandler.handle(true));
  116. }
  117. Future<Stream<Message>> streamDailySummary(
  118. {required int? startTime,
  119. required int? endTime,
  120. required String? userId}) {
  121. return streamApi
  122. .dailySummary(QueryTrackRequest(
  123. startTime: startTime, endTime: endTime, userId: userId))
  124. .then((response) async {
  125. List<String>? contentType = response.headers['Content-Type'];
  126. if (contentType != null) {
  127. for (var value in contentType) {
  128. if (value.contains('text/event-stream')) {
  129. return response.stream;
  130. } else if (value.contains('application/json')) {
  131. BaseResponse<String> baseResponse = BaseResponse.fromJson(
  132. jsonDecode(await response.stream
  133. .map((bytes) => utf8.decoder.convert(bytes))
  134. .toList()
  135. .then((value) => value.join())),
  136. (json) => json as String);
  137. throw ServerErrorException(baseResponse.code, baseResponse.message);
  138. }
  139. }
  140. }
  141. throw Exception('Invalid content type');
  142. }).then((stream) => SSEParseUtil.parse(stream));
  143. }
  144. Future<List<String>?> dailyKeyword(
  145. {required int? startTime,
  146. required int? endTime,
  147. required String? userId}) {
  148. return atmobApi
  149. .dailyKeyword(QueryTrackRequest(
  150. startTime: startTime, endTime: endTime, userId: userId))
  151. .then(HttpHandler.handle(true))
  152. .then((response) => response.list);
  153. }
  154. Future<List<TrackDailyBean>?> trackDailyInterpret(
  155. {required int? startTime,
  156. required int? endTime,
  157. required String? userId}) {
  158. return atmobApi
  159. .trackDailyInterpret(QueryTrackRequest(
  160. startTime: startTime, endTime: endTime, userId: userId))
  161. .then(HttpHandler.handle(true))
  162. .then((response) => response.list);
  163. }
  164. Future<Stream<Message>> streamDailyExceptionAnalyse(
  165. {required int? startTime,
  166. required int? endTime,
  167. required String? userId}) {
  168. return streamApi
  169. .dailyExceptionAnalyse(QueryTrackRequest(
  170. startTime: startTime, endTime: endTime, userId: userId))
  171. .then((response) async {
  172. List<String>? contentType = response.headers['Content-Type'];
  173. if (contentType != null) {
  174. for (var value in contentType) {
  175. if (value.contains('text/event-stream')) {
  176. return response.stream;
  177. } else if (value.contains('application/json')) {
  178. BaseResponse<String> baseResponse = BaseResponse.fromJson(
  179. jsonDecode(await response.stream
  180. .map((bytes) => utf8.decoder.convert(bytes))
  181. .toList()
  182. .then((value) => value.join())),
  183. (json) => json as String);
  184. throw ServerErrorException(baseResponse.code, baseResponse.message);
  185. }
  186. }
  187. }
  188. throw Exception('Invalid content type');
  189. }).then((stream) => SSEParseUtil.parse(stream));
  190. }
  191. }