main_repository.dart 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  1. import 'package:domain/entity/feedback_detail_entity.dart';
  2. import 'package:domain/entity/home_list_entity.dart';
  3. import 'package:domain/entity/latest_news_detail_entity.dart';
  4. import 'package:domain/entity/latest_news_page_entity.dart';
  5. import 'package:domain/entity/notification_page_entity.dart';
  6. import 'package:domain/entity/visitor_page_entity.dart';
  7. import 'package:plugin_platform/platform_export.dart';
  8. import 'package:plugin_platform/http/dio_engine.dart';
  9. import 'package:plugin_platform/http/http_result.dart';
  10. import 'package:riverpod_annotation/riverpod_annotation.dart';
  11. import 'package:shared/utils/log_utils.dart';
  12. import 'package:shared/utils/util.dart';
  13. import '../constants/api_constants.dart';
  14. import 'package:flutter_riverpod/flutter_riverpod.dart';
  15. import 'package:plugin_basic/provider/http_provider/http_provider.dart';
  16. import '../entity/feedback_list_entity.dart';
  17. import '../entity/id_name_entity.dart';
  18. import '../entity/property_news_entity.dart';
  19. part 'main_repository.g.dart';
  20. @Riverpod(keepAlive: true)
  21. MainRepository mainRepository(Ref ref) {
  22. final dioEngine = ref.watch(dioEngineProvider);
  23. return MainRepository(dioEngine: dioEngine);
  24. }
  25. /*
  26. * 首页的数据仓库
  27. */
  28. class MainRepository {
  29. DioEngine dioEngine;
  30. MainRepository({required this.dioEngine});
  31. /// 获取反馈的分类
  32. Future<HttpResult<IdNameEntity>> fetchFeedbackCategory({
  33. CancelToken? cancelToken,
  34. }) async {
  35. final result = await dioEngine.requestNetResult(
  36. ApiConstants.apiFeedbackCategory,
  37. method: HttpMethod.GET,
  38. isShowLoadingDialog: true,
  39. networkDebounce: true,
  40. cancelToken: cancelToken,
  41. );
  42. if (result.isSuccess) {
  43. final jsonList = result.getListJson();
  44. //获取List数据 需要转换一次
  45. var list = jsonList
  46. ?.map((value) {
  47. if (value is Map<String, dynamic>) {
  48. return IdNameEntity.fromJson(value);
  49. } else {
  50. return null;
  51. }
  52. })
  53. .where((item) => item != null)
  54. .cast<IdNameEntity>()
  55. .toList();
  56. return result.convert<IdNameEntity>(list: list);
  57. }
  58. return result.convert<IdNameEntity>();
  59. }
  60. /// 发布反馈
  61. Future<HttpResult> postFeedback({
  62. required String? categoryId,
  63. required String? title,
  64. required String? content,
  65. List<String>? paths,
  66. CancelToken? cancelToken,
  67. }) async {
  68. Map<String, String> params = {};
  69. params['category_id'] = categoryId!;
  70. params['title'] = title!;
  71. params['content'] = content!;
  72. Map<String, String> files = {};
  73. if (paths != null && paths.isNotEmpty) {
  74. paths.asMap().forEach((index, path) {
  75. files["resources[$index]"] = path;
  76. });
  77. }
  78. final result = await dioEngine.requestNetResult(
  79. ApiConstants.apiFeedbackPost,
  80. params: params,
  81. paths: files,
  82. method: HttpMethod.POST,
  83. isShowLoadingDialog: true,
  84. networkDebounce: true,
  85. cancelToken: cancelToken,
  86. );
  87. if (result.isSuccess) {
  88. return result.convert();
  89. }
  90. return result.convert();
  91. }
  92. /// 已发布的反馈列表
  93. Future<HttpResult<FeedbackListEntity>> fetchFeedbackList({
  94. required String status,
  95. required int curPage,
  96. CancelToken? cancelToken,
  97. }) async {
  98. Map<String, String> params = {};
  99. params['status'] = status;
  100. params['page'] = curPage.toString();
  101. params['limit'] = "10";
  102. final result = await dioEngine.requestNetResult(
  103. ApiConstants.apiFeedbackList,
  104. params: params,
  105. method: HttpMethod.GET,
  106. cancelToken: cancelToken,
  107. );
  108. if (result.isSuccess) {
  109. final json = result.getDataJson();
  110. var data = FeedbackListEntity.fromJson(json!);
  111. return result.convert<FeedbackListEntity>(data: data);
  112. }
  113. return result.convert();
  114. }
  115. /// 获取反馈详情
  116. Future<HttpResult<FeedbackDetailEntity>> fetchFeedbackDetail({
  117. required String? id,
  118. CancelToken? cancelToken,
  119. }) async {
  120. Map<String, String> params = {};
  121. params['id'] = id ?? "";
  122. final result = await dioEngine.requestNetResult(
  123. ApiConstants.apiFeedbackDetail,
  124. method: HttpMethod.GET,
  125. params: params,
  126. isShowLoadingDialog: true,
  127. networkDebounce: true,
  128. cancelToken: cancelToken,
  129. );
  130. if (result.isSuccess) {
  131. final json = result.getDataJson();
  132. var data = FeedbackDetailEntity.fromJson(json!);
  133. return result.convert<FeedbackDetailEntity>(data: data);
  134. }
  135. return result.convert();
  136. }
  137. /// 创建访客的信息
  138. Future<HttpResult> createVisitor({
  139. required String? name,
  140. required String? phone,
  141. required String? nric,
  142. required String? vehicleNumber,
  143. required String? accessDate,
  144. required String? note,
  145. CancelToken? cancelToken,
  146. }) async {
  147. Map<String, String> params = {};
  148. params['name'] = name ?? "";
  149. params['phone'] = phone ?? "";
  150. params['nric'] = nric ?? "";
  151. params['access_date'] = accessDate ?? "";
  152. if (Utils.isNotEmpty(vehicleNumber)) {
  153. params['vehicle_number'] = vehicleNumber!;
  154. }
  155. if (Utils.isNotEmpty(note)) {
  156. params['note'] = note!;
  157. }
  158. final result = await dioEngine.requestNetResult(
  159. ApiConstants.apiCreateVisitor,
  160. params: params,
  161. method: HttpMethod.POST,
  162. isShowLoadingDialog: true,
  163. networkDebounce: true,
  164. cancelToken: cancelToken,
  165. );
  166. if (result.isSuccess) {
  167. return result.convert();
  168. }
  169. return result.convert();
  170. }
  171. /// 已创建的访客列表
  172. Future<HttpResult<VisitorPageEntity>> fetchVisitorList({
  173. required String type,
  174. required int curPage,
  175. CancelToken? cancelToken,
  176. }) async {
  177. Map<String, String> params = {};
  178. params['type'] = type;
  179. params['page'] = curPage.toString();
  180. params['limit'] = "10";
  181. final result = await dioEngine.requestNetResult(
  182. ApiConstants.apiVisitorList,
  183. params: params,
  184. method: HttpMethod.GET,
  185. cancelToken: cancelToken,
  186. );
  187. if (result.isSuccess) {
  188. final json = result.getDataJson();
  189. var data = VisitorPageEntity.fromJson(json!);
  190. return result.convert<VisitorPageEntity>(data: data);
  191. }
  192. return result.convert();
  193. }
  194. /// 首页列表的获取
  195. Future<HttpResult<HomeListEntity>> fetchHomeIndex({
  196. bool needLoading = true,
  197. CancelToken? cancelToken,
  198. }) async {
  199. final result = await dioEngine.requestNetResult(
  200. ApiConstants.apiHomeList,
  201. method: HttpMethod.GET,
  202. isShowLoadingDialog: needLoading,
  203. networkDebounce: true,
  204. cancelToken: cancelToken,
  205. );
  206. if (result.isSuccess) {
  207. final json = result.getDataJson();
  208. var data = HomeListEntity.fromJson(json!);
  209. return result.convert<HomeListEntity>(data: data);
  210. }
  211. return result.convert();
  212. }
  213. /// 获取首页最新新闻的列表
  214. Future<HttpResult<LatestNewsPageEntity>> fetchLatestNewsList({
  215. required String type,
  216. required int curPage,
  217. CancelToken? cancelToken,
  218. }) async {
  219. Map<String, String> params = {};
  220. params['page'] = curPage.toString();
  221. params['limit'] = "10";
  222. params['type'] = type.toString();
  223. final result = await dioEngine.requestNetResult(
  224. ApiConstants.apiLatestNewsList,
  225. params: params,
  226. method: HttpMethod.GET,
  227. cancelToken: cancelToken,
  228. );
  229. if (result.isSuccess) {
  230. final json = result.getDataJson();
  231. var data = LatestNewsPageEntity.fromJson(json!);
  232. return result.convert<LatestNewsPageEntity>(data: data);
  233. }
  234. return result.convert();
  235. }
  236. /// 获取首页最新新闻的详情
  237. Future<HttpResult<LatestNewsDetailEntity>> fetchLatestNewsDetail({
  238. required String id,
  239. CancelToken? cancelToken,
  240. }) async {
  241. Map<String, String> params = {};
  242. params['id'] = id;
  243. final result = await dioEngine.requestNetResult(
  244. ApiConstants.apiLatestNewsDetail,
  245. params: params,
  246. method: HttpMethod.GET,
  247. isShowLoadingDialog: true,
  248. networkDebounce: true,
  249. cancelToken: cancelToken,
  250. );
  251. if (result.isSuccess) {
  252. final json = result.getDataJson();
  253. var data = LatestNewsDetailEntity.fromJson(json!);
  254. return result.convert<LatestNewsDetailEntity>(data: data);
  255. }
  256. return result.convert();
  257. }
  258. // 获取 房产 news 列表
  259. Future<HttpResult<PropertyNewsEntity>> fetchPropertyNewsList({
  260. required int curPage,
  261. CancelToken? cancelToken,
  262. }) async {
  263. Map<String, dynamic> params = {};
  264. params['page'] = curPage.toString();
  265. params['limit'] = "10";
  266. final result = await dioEngine.requestNetResult(
  267. '/api/v1/user/property/news/list', // api 地址
  268. params: params,
  269. method: HttpMethod.GET,
  270. cancelToken: cancelToken,
  271. );
  272. if (result.isSuccess) {
  273. final json = result.getDataJson();
  274. var data = PropertyNewsEntity.fromJson(json!);
  275. return result.convert<PropertyNewsEntity>(data: data);
  276. }
  277. return result.convert();
  278. }
  279. /// 获取首页管理员指引的列表
  280. Future<HttpResult<LatestNewsPageEntity>> fetchManageGuideList({
  281. required int curPage,
  282. CancelToken? cancelToken,
  283. }) async {
  284. Map<String, String> params = {};
  285. params['page'] = curPage.toString();
  286. params['limit'] = "10";
  287. final result = await dioEngine.requestNetResult(
  288. ApiConstants.apiManageGuideList,
  289. params: params,
  290. method: HttpMethod.GET,
  291. cancelToken: cancelToken,
  292. );
  293. if (result.isSuccess) {
  294. final json = result.getDataJson();
  295. var data = LatestNewsPageEntity.fromJson(json!);
  296. return result.convert<LatestNewsPageEntity>(data: data);
  297. }
  298. return result.convert();
  299. }
  300. /// 获取首页管理员指引的详情
  301. Future<HttpResult<LatestNewsDetailEntity>> fetchManageGuideDetail({
  302. required String id,
  303. CancelToken? cancelToken,
  304. }) async {
  305. Map<String, String> params = {};
  306. params['id'] = id;
  307. final result = await dioEngine.requestNetResult(
  308. ApiConstants.apiManageGuideDetail,
  309. params: params,
  310. method: HttpMethod.GET,
  311. isShowLoadingDialog: true,
  312. networkDebounce: true,
  313. cancelToken: cancelToken,
  314. );
  315. if (result.isSuccess) {
  316. final json = result.getDataJson();
  317. var data = LatestNewsDetailEntity.fromJson(json!);
  318. return result.convert<LatestNewsDetailEntity>(data: data);
  319. }
  320. return result.convert();
  321. }
  322. /// 通知列表
  323. Future<HttpResult<NotificationPageEntity>> fetchNotificationList({
  324. required int curPage,
  325. CancelToken? cancelToken,
  326. }) async {
  327. Map<String, String> params = {};
  328. params['page'] = curPage.toString();
  329. params['limit'] = "10";
  330. final result = await dioEngine.requestNetResult(
  331. ApiConstants.apiNotificationList,
  332. params: params,
  333. method: HttpMethod.GET,
  334. cancelToken: cancelToken,
  335. );
  336. if (result.isSuccess) {
  337. final json = result.getDataJson();
  338. var data = NotificationPageEntity.fromJson(json!);
  339. return result.convert<NotificationPageEntity>(data: data);
  340. }
  341. return result.convert();
  342. }
  343. /// 设置通知已读
  344. Future<HttpResult> setNotificationRead({
  345. String? id,
  346. CancelToken? cancelToken,
  347. }) async {
  348. Map<String, String> params = {};
  349. if (Utils.isNotEmpty(id)) {
  350. params['id'] = id!;
  351. }
  352. final result = await dioEngine.requestNetResult(
  353. ApiConstants.apiNotificationRead,
  354. params: params,
  355. method: HttpMethod.POST,
  356. isShowLoadingDialog: true,
  357. networkDebounce: true,
  358. cancelToken: cancelToken,
  359. );
  360. if (result.isSuccess) {
  361. return result.convert();
  362. }
  363. return result.convert();
  364. }
  365. }