// // RQActivateVIPViewModel.m // SDJK // // Created by 张嵘 on 2021/9/9. // #import "RQActivateVIPViewModel.h" @interface RQActivateVIPViewModel () /// activateVIPCode @property (nonatomic, readwrite, copy) NSString *activateVIPCode; /// error (PS;这个记录请求过程中的发生的错误,请求之前必须置nil) @property (nonatomic, readwrite, strong) NSError *error; /// 开通按钮有效性 @property (nonatomic, readwrite, strong) RACSignal *validOpenSignal; /// openCommand @property (nonatomic, readwrite, strong) RACCommand *openCommand; /// getVipPriceCommand @property (nonatomic, readwrite, strong) RACCommand *getVipPriceCommand; /// getVipPriceOrriginalCommand //@property (nonatomic, readwrite, strong) RACCommand *getVipPriceOrriginalCommand; /// closeCommand @property (nonatomic, readwrite, strong) RACCommand *closeCommand; /// vipPrice @property (nonatomic, readwrite, copy) NSString *vipPrice; /// vipPriceOriginal @property (nonatomic, readwrite, copy) NSString *vipPriceOriginal; @property (nonatomic, readwrite, strong) NSDictionary *allVipTypeDic; @property (nonatomic, readwrite, strong) RQDictTypeModel *currentDictTypeModel; @end @implementation RQActivateVIPViewModel - (instancetype)initWithServices:(id)services params:(NSDictionary *)params { if (self = [super initWithServices:services params:params]) { } return self; } - (void)initialize { [super initialize]; self.title = @"开通VIP"; self.prefersNavigationBarHidden = YES; @weakify(self); /// 按钮的有效性 self.validOpenSignal = [[RACSignal combineLatest:@[RACObserve(self, activateVIPCode)] reduce:^(NSString *activateVIPCode) { return @(RQStringIsNotEmpty(activateVIPCode)); }] distinctUntilChanged]; void (^doNext)(RQBaseModel *) = ^(RQBaseModel *baseModel){ if ([baseModel isKindOfClass:[RQPrepareOrderModel class]]) { RQPrepareOrderModel *prepareOrderModel = (RQPrepareOrderModel *)baseModel; [RQ_WECHAT_MANAGER clickToWechatPayWithPrepareOrder:prepareOrderModel]; } }; self.openCommand = [[RACCommand alloc] initWithSignalBlock:^RACSignal * _Nonnull(id _Nullable input) { @strongify(self); /// 将self.error = nil; self.error = nil; return [[self buy] doNext:doNext]; return [RACSignal empty]; }]; self.closeCommand = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) { @strongify(self); [self.services popViewModelAnimated:YES]; return [RACSignal empty]; }]; [[[RQNotificationCenter rac_addObserverForName:RQUserNotificationAlipayOrWechatSuccess object:nil] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(NSNotification * note) { PayResp *resp = (PayResp *)note.object; NSLog(@"----微信支付成功:%@",resp.returnKey); [RQ_CACHE_MANAGER removeCacheWithPath:RQ_GET_VipInfo parameters:nil]; [RQ_USER_MANAGER isVipWithComplete:^(NSInteger isVip) { if (isVip > 0) { [MBProgressHUD rq_showTips:@"购买VIP成功"]; } else { [MBProgressHUD rq_showTips:@"VIP激活中!请稍等片刻!!!"]; } [self.closeCommand execute:nil]; }]; }]; } #pragma mark - PrivateMethods - (RACSignal *)open { @weakify(self); return [[RACSignal createSignal:^RACDisposable * _Nullable(id _Nonnull subscriber) { [[RQ_HTTP_Service putVipCodeWithVipCode:self.activateVIPCode] subscribeNext:^(RQBaseModel *baseModel) { [subscriber sendNext:baseModel]; } error:^(NSError * _Nullable error) { [subscriber sendError:error]; } completed:^{ [subscriber sendCompleted]; }]; return [RACScopedDisposable disposableWithBlock:^{ /// 取消任务 }]; }] doError:^(NSError * _Nonnull error) { @strongify(self); self.error = error; }]; } - (RACSignal *)buy { @weakify(self); return [[RACSignal createSignal:^RACDisposable * _Nullable(id _Nonnull subscriber) { [[RQ_HTTP_Service postPrepareOrderWithDictCode:[NSString qmui_stringWithNSInteger:self.currentDictTypeModel.dictCode]] subscribeNext:^(RQPrepareOrderModel *prepareOrderModel) { [subscriber sendNext:prepareOrderModel]; } error:^(NSError * _Nullable error) { [subscriber sendError:error]; } completed:^{ [subscriber sendCompleted]; }]; return [RACScopedDisposable disposableWithBlock:^{ /// 取消任务 }]; }] doError:^(NSError * _Nonnull error) { @strongify(self); self.error = error; }]; } - (RACSignal *)getVipPrice { @weakify(self); return [[RACSignal createSignal:^RACDisposable * _Nullable(id _Nonnull subscriber) { [[RQ_HTTP_Service getConfigKeyWithPath:RQVipPricePath] subscribeNext:^(NSString *vipPriceStr) { [subscriber sendNext:vipPriceStr]; } error:^(NSError * _Nullable error) { [subscriber sendError:error]; } completed:^{ [subscriber sendCompleted]; }]; return [RACScopedDisposable disposableWithBlock:^{ /// 取消任务 }]; }] doError:^(NSError * _Nonnull error) { @strongify(self); self.error = error; }]; } - (RACCommand *)getVipPriceCommand { @weakify(self); return [[RACCommand alloc] initWithSignalBlock:^RACSignal * _Nonnull(id _Nullable input) { @strongify(self); /// 将self.error = nil; self.error = nil; // [[RQ_HTTP_Service getConfigKeyWithPath:RQVipPricePath] subscribeNext:^(NSString *vipPriceStr) { // self.vipPrice = vipPriceStr; // } error:^(NSError * _Nullable error) { // @strongify(self); // self.error = error; // } completed:^{ // // }]; [[RQ_HTTP_Service getDictTypeWithPath:RQVipTypePath] subscribeNext:^(id _Nullable x) { NSArray *a = RQObjectIsNil(x)? @[] : x; NSString *vipPriceStr = [[a.rac_sequence.signal filter:^BOOL(RQDictTypeModel *dictTypeModel) { @strongify(self); NSString *key = [NSString qmui_stringWithNSInteger:RQ_USER_MANAGER.isVip]; return [dictTypeModel.dictLabel isEqualToString:self.allVipTypeDic[key]]; }].toArray.rac_sequence.signal map:^id _Nullable(RQDictTypeModel *dictTypeModel) { @strongify(self); self.currentDictTypeModel = dictTypeModel; return dictTypeModel.dictValue; }].toArray.firstObject; self.vipPrice = [vipPriceStr componentsSeparatedByString:@","].firstObject; self.vipPriceOriginal = [vipPriceStr componentsSeparatedByString:@","].lastObject; } error:^(NSError * _Nullable error) { @strongify(self); self.error = error; } completed:^{ }]; return [RACSignal empty]; }]; } //- (RACCommand *)getVipPriceOrriginalCommand { // @weakify(self); // return [[RACCommand alloc] initWithSignalBlock:^RACSignal * _Nonnull(id _Nullable input) { // @strongify(self); // /// 将self.error = nil; // self.error = nil; // [[RQ_HTTP_Service getConfigKeyWithPath:RQVipPriceOriginalPath] subscribeNext:^(NSString *vipPriceOriginalStr) { // self.vipPriceOriginal = vipPriceOriginalStr; // } error:^(NSError * _Nullable error) { // @strongify(self); // self.error = error; // } completed:^{ // // }]; // return [RACSignal empty]; // }]; //} - (NSDictionary *)allVipTypeDic { return @{ @"2" : @"sdjk_up_sp_vip", @"0" : @"sdjk_sp_vip", }; } @end