main_repository.dart 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. import 'package:domain/entity/feedback_detail_entity.dart';
  2. import 'package:domain/entity/visitor_page_entity.dart';
  3. import 'package:plugin_platform/platform_export.dart';
  4. import 'package:plugin_platform/http/dio_engine.dart';
  5. import 'package:plugin_platform/http/http_result.dart';
  6. import 'package:riverpod_annotation/riverpod_annotation.dart';
  7. import 'package:shared/utils/log_utils.dart';
  8. import 'package:shared/utils/util.dart';
  9. import '../constants/api_constants.dart';
  10. import 'package:flutter_riverpod/flutter_riverpod.dart';
  11. import 'package:plugin_basic/provider/http_provider/http_provider.dart';
  12. import '../entity/feedback_list_entity.dart';
  13. import '../entity/id_name_entity.dart';
  14. part 'main_repository.g.dart';
  15. @Riverpod(keepAlive: true)
  16. MainRepository mainRepository(Ref ref) {
  17. final dioEngine = ref.watch(dioEngineProvider);
  18. return MainRepository(dioEngine: dioEngine);
  19. }
  20. /*
  21. * 首页的数据仓库
  22. */
  23. class MainRepository {
  24. DioEngine dioEngine;
  25. MainRepository({required this.dioEngine});
  26. /// 获取反馈的分类
  27. Future<HttpResult<IdNameEntity>> fetchFeedbackCategory({
  28. CancelToken? cancelToken,
  29. }) async {
  30. final result = await dioEngine.requestNetResult(
  31. ApiConstants.apiFeedbackCategory,
  32. method: HttpMethod.GET,
  33. isShowLoadingDialog: true,
  34. networkDebounce: true,
  35. cancelToken: cancelToken,
  36. );
  37. if (result.isSuccess) {
  38. final jsonList = result.getListJson();
  39. //获取List数据 需要转换一次
  40. var list = jsonList
  41. ?.map((value) {
  42. if (value is Map<String, dynamic>) {
  43. return IdNameEntity.fromJson(value);
  44. } else {
  45. return null;
  46. }
  47. })
  48. .where((item) => item != null)
  49. .cast<IdNameEntity>()
  50. .toList();
  51. return result.convert<IdNameEntity>(list: list);
  52. }
  53. return result.convert<IdNameEntity>();
  54. }
  55. /// 发布反馈
  56. Future<HttpResult> postFeedback({
  57. required String? categoryId,
  58. required String? title,
  59. required String? content,
  60. List<String>? paths,
  61. CancelToken? cancelToken,
  62. }) async {
  63. Map<String, String> params = {};
  64. params['category_id'] = categoryId!;
  65. params['title'] = title!;
  66. params['content'] = content!;
  67. Map<String, String> files = {};
  68. if (paths != null && paths.isNotEmpty) {
  69. paths.asMap().forEach((index, path) {
  70. files["resources[$index]"] = path;
  71. });
  72. }
  73. final result = await dioEngine.requestNetResult(
  74. ApiConstants.apiFeedbackPost,
  75. params: params,
  76. paths: files,
  77. method: HttpMethod.POST,
  78. isShowLoadingDialog: true,
  79. networkDebounce: true,
  80. cancelToken: cancelToken,
  81. );
  82. if (result.isSuccess) {
  83. return result.convert();
  84. }
  85. return result.convert();
  86. }
  87. /// 已发布的反馈列表
  88. Future<HttpResult<FeedbackListEntity>> fetchFeedbackList({
  89. required String status,
  90. required int curPage,
  91. CancelToken? cancelToken,
  92. }) async {
  93. Map<String, String> params = {};
  94. params['status'] = status;
  95. params['page'] = curPage.toString();
  96. params['limit'] = "10";
  97. final result = await dioEngine.requestNetResult(
  98. ApiConstants.apiFeedbackList,
  99. params: params,
  100. method: HttpMethod.GET,
  101. cancelToken: cancelToken,
  102. );
  103. if (result.isSuccess) {
  104. final json = result.getDataJson();
  105. var data = FeedbackListEntity.fromJson(json!);
  106. return result.convert<FeedbackListEntity>(data: data);
  107. }
  108. return result.convert();
  109. }
  110. /// 获取反馈详情
  111. Future<HttpResult<FeedbackDetailEntity>> fetchFeedbackDetail({
  112. required String? id,
  113. CancelToken? cancelToken,
  114. }) async {
  115. Map<String, String> params = {};
  116. params['id'] = id ?? "";
  117. final result = await dioEngine.requestNetResult(
  118. ApiConstants.apiFeedbackDetail,
  119. method: HttpMethod.GET,
  120. params: params,
  121. isShowLoadingDialog: true,
  122. networkDebounce: true,
  123. cancelToken: cancelToken,
  124. );
  125. if (result.isSuccess) {
  126. final json = result.getDataJson();
  127. var data = FeedbackDetailEntity.fromJson(json!);
  128. return result.convert<FeedbackDetailEntity>(data: data);
  129. }
  130. return result.convert();
  131. }
  132. /// 创建访客的信息
  133. Future<HttpResult> createVisitor({
  134. required String? name,
  135. required String? phone,
  136. required String? nric,
  137. required String? vehicleNumber,
  138. required String? accessDate,
  139. required String? note,
  140. CancelToken? cancelToken,
  141. }) async {
  142. Map<String, String> params = {};
  143. params['name'] = name ?? "";
  144. params['phone'] = phone ?? "";
  145. params['nric'] = nric ?? "";
  146. params['access_date'] = accessDate ?? "";
  147. if (Utils.isNotEmpty(vehicleNumber)) {
  148. params['vehicle_number'] = vehicleNumber!;
  149. }
  150. if (Utils.isNotEmpty(note)) {
  151. params['note'] = note!;
  152. }
  153. final result = await dioEngine.requestNetResult(
  154. ApiConstants.apiCreateVisitor,
  155. params: params,
  156. method: HttpMethod.POST,
  157. isShowLoadingDialog: true,
  158. networkDebounce: true,
  159. cancelToken: cancelToken,
  160. );
  161. if (result.isSuccess) {
  162. return result.convert();
  163. }
  164. return result.convert();
  165. }
  166. /// 已创建的访客列表
  167. Future<HttpResult<VisitorPageEntity>> fetchVisitorList({
  168. required String type,
  169. required int curPage,
  170. CancelToken? cancelToken,
  171. }) async {
  172. Map<String, String> params = {};
  173. params['type'] = type;
  174. params['page'] = curPage.toString();
  175. params['limit'] = "10";
  176. final result = await dioEngine.requestNetResult(
  177. ApiConstants.apiVisitorList,
  178. params: params,
  179. method: HttpMethod.GET,
  180. cancelToken: cancelToken,
  181. );
  182. if (result.isSuccess) {
  183. final json = result.getDataJson();
  184. var data = VisitorPageEntity.fromJson(json!);
  185. return result.convert<VisitorPageEntity>(data: data);
  186. }
  187. return result.convert();
  188. }
  189. }