store_repository.dart 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. import 'package:injectable/injectable.dart';
  2. import 'package:keyboard/data/api/atmob_api.dart';
  3. import 'package:keyboard/data/api/response/item_list_response.dart';
  4. import 'package:keyboard/data/api/response/order_pay_response.dart';
  5. import 'package:keyboard/utils/http_handler.dart';
  6. import 'package:get/get.dart';
  7. import 'package:keyboard/utils/method_chanel_ios_util.dart';
  8. import 'package:keyboard/widget/platform_util.dart';
  9. import '../../base/app_base_request.dart';
  10. import '../../di/get_it.dart';
  11. import '../../utils/async_util.dart';
  12. import '../../utils/atmob_log.dart';
  13. import '../../utils/error_handler.dart';
  14. import '../../utils/payment_status_manager.dart';
  15. import '../api/request/order_pay_request.dart';
  16. import '../api/request/order_status_request.dart';
  17. import '../api/request/subscribe_check_request.dart';
  18. import '../api/request/subscribe_resume_request.dart';
  19. import '../api/response/item_retention_response.dart';
  20. import '../api/response/member_agreement_check_response.dart';
  21. import '../api/response/member_new_user_response.dart';
  22. import '../bean/character_info.dart';
  23. import '../bean/goods_info.dart';
  24. import '../bean/pay_way_info.dart';
  25. import '../consts/error_code.dart';
  26. import 'account_repository.dart';
  27. @lazySingleton
  28. class StoreRepository {
  29. final tag = 'StoreRepository';
  30. final AtmobApi atmobApi;
  31. final AccountRepository accountRepository;
  32. CancelableFuture? goodsInfoFuture;
  33. final RxList<GoodsInfo> _newDiscountGoodsInfoList = <GoodsInfo>[].obs;
  34. RxList<GoodsInfo> get newDiscountGoodsInfoList => _newDiscountGoodsInfoList;
  35. final RxList<PayWayInfo> _newDiscountPayWayList = <PayWayInfo>[].obs;
  36. RxList<PayWayInfo> get newDiscountPayWayList => _newDiscountPayWayList;
  37. final RxList<CharacterInfo> _charactersList = <CharacterInfo>[].obs;
  38. RxList<CharacterInfo> get charactersList => _charactersList;
  39. final RxBool hasAutoRenewal = false.obs;
  40. final RxBool isDiscount = false.obs;
  41. StoreRepository(this.atmobApi, this.accountRepository) {
  42. print('$tag....init');
  43. refreshNewDiscountGoodsInfoList();
  44. }
  45. void refreshNewDiscountGoodsInfoList() {
  46. goodsInfoFuture?.cancel();
  47. goodsInfoFuture = AsyncUtil.retryWithExponentialBackoff(
  48. () => getMemberNewUserGoodsList(),
  49. 4,
  50. predicate: (error) {
  51. if (error is ServerErrorException) {
  52. return error.code != ErrorCode.noLoginError;
  53. }
  54. return true;
  55. },
  56. );
  57. goodsInfoFuture?.catchError((error) {
  58. ErrorHandler.toastError(error);
  59. });
  60. }
  61. Future<ItemListResponse> getGoodsInfoList() async {
  62. return await atmobApi
  63. .getGoodsList(AppBaseRequest())
  64. .then(HttpHandler.handle(true));
  65. }
  66. Future<MemberNewUserResponse> getMemberNewUserGoodsList() async {
  67. return await atmobApi
  68. .getMemberUserResponse(AppBaseRequest())
  69. .then(HttpHandler.handle(true))
  70. .then((data) async {
  71. _newDiscountGoodsInfoList.clear();
  72. _newDiscountPayWayList.clear();
  73. _charactersList.clear();
  74. if (data.goodsInfoList?.isNotEmpty == true) {
  75. _newDiscountGoodsInfoList.addAll(data.goodsInfoList!);
  76. var isHasDiscount = await MethodChanelIOSUtil.isHasDiscount(_newDiscountGoodsInfoList.first.appleGoodsId);
  77. isDiscount.value = isHasDiscount;
  78. }
  79. if (data.payInfoList?.isNotEmpty == true) {
  80. _newDiscountPayWayList.addAll(data.payInfoList!);
  81. }
  82. if (data.characterInfos?.isNotEmpty == true) {
  83. _charactersList.addAll(data.characterInfos!);
  84. }
  85. return data;
  86. });
  87. }
  88. Future<OrderPayResponse> submitAndRequestPay({
  89. required int goodsId,
  90. required int payPlatform,
  91. required int payMethod,
  92. }) {
  93. return atmobApi
  94. .orderPay(
  95. OrderPayRequest(
  96. goodsId: goodsId,
  97. payPlatform: payPlatform,
  98. payMethod: payMethod,
  99. ),
  100. )
  101. .then(HttpHandler.handle(false));
  102. }
  103. Future<int> orderStatus(String outTradeNo, {String? receiptData}) {
  104. return atmobApi
  105. .orderStatus(OrderStatusRequest(outTradeNo, receiptData))
  106. .then(HttpHandler.handle(false))
  107. .then((data) {
  108. if (data.payStatus == PaymentStatus.payStatusSuccess) {
  109. accountRepository.refreshUserInfo();
  110. }
  111. return data.payStatus;
  112. });
  113. }
  114. Future<ItemRetentionResponse> getItemRetention() {
  115. return atmobApi
  116. .getItemRetention(AppBaseRequest())
  117. .then(HttpHandler.handle(true));
  118. }
  119. /// 检查订阅状态(IOS使用),验证用户是否可发起支付
  120. Future<void> subscribeCheck(
  121. int payPlatform,
  122. int payMethod,
  123. String receiptData,
  124. ) {
  125. return atmobApi
  126. .subscribeCheck(
  127. SubscribeCheckRequest(payPlatform, payMethod, receiptData),
  128. )
  129. .then(HttpHandler.handle(true));
  130. }
  131. /// 恢复订阅(IOS使用)
  132. Future<void> subscribeResume(
  133. int payPlatform,
  134. int payMethod,
  135. String receiptData,
  136. ) {
  137. return atmobApi
  138. .subscribeResume(
  139. SubscribeResumeRequest(payPlatform, payMethod, receiptData),
  140. )
  141. .then(HttpHandler.handle(true));
  142. }
  143. /// 检查当前是否有生效中的支付宝签约协议
  144. Future<MemberAgreementCheckResponse> checkMemberAgreement() async {
  145. return await atmobApi
  146. .memberAgreementCheck(AppBaseRequest())
  147. .then(HttpHandler.handle(true))
  148. .then((response) {
  149. hasAutoRenewal.value = response.exist;
  150. return response;
  151. });
  152. }
  153. /// 解约支付宝签约协议
  154. Future<void> unSignMemberAgreement() async {
  155. return await atmobApi
  156. .memberAgreementUnSign(AppBaseRequest())
  157. .then(HttpHandler.handle(true));
  158. }
  159. static StoreRepository getInstance() => getIt.get<StoreRepository>();
  160. }