CNLiveServicePresent.m 18.2 KB
//
//  CNLiveServicePresent.m
//  CNLiveCServiceModule
//
//  Created by CNLive on 2021/11/24.
//

#import "CNLiveServicePresent.h"

static const CGFloat margin = 15;

@implementation CNLiveServicePresent
+ (void)searchServiceList:(NSString *)searchStr page:(NSString *)page result:(nonnull void (^)(NSArray<CNLiveSearchModel *> * _Nonnull, BOOL))succeed error:(nonnull void (^)(void))failure
{
    
    NSDictionary * params = @{
        @"sid":CNUserShareModelUid?CNUserShareModelUid:@"",
        @"title":searchStr?searchStr:@"",
        @"type":@"1",
        @"page":page?page:@"",
        @"pageSize":@"10"
    };
    [CNLiveNetworking setAllowRequestDefaultArgument:YES];
    [CNLiveNetworking setupShowDataResult:NO];
    [CNLiveNetworking setupShowResult:YES];
    [CNLiveNetworking requestNetworkWithMethod:CNLiveRequestMethodGET URLString:cn_API_Classify(@"/servingApi/search") Param:params CacheType:CNLiveNetworkCacheTypeNetworkOnly CompletionBlock:^(NSURLSessionTask *requestTask, id responseObject, NSError *error) {
        if (responseObject&&[responseObject isKindOfClass:[NSDictionary class]]) {
            NSString *lastPageStr = responseObject[@"data"][@"hasNextPage"];
            BOOL isLastPage = !lastPageStr.boolValue;
            NSArray *listArr = responseObject[@"data"][@"list"];
            if (listArr&&[listArr isKindOfClass:[NSArray class]]) {
                if (listArr.count == 0) {
                    !succeed?:succeed(listArr,isLastPage);
                }else{
                    NSMutableArray *dataArray = [NSMutableArray array];
                    for (NSDictionary *dic in listArr) {
                        CNLiveSearchModel *model = [CNLiveSearchModel mj_objectWithKeyValues:dic];
                        model.searchStr = searchStr;
                        [dataArray addObject:model];
                    }
                    !succeed?:succeed(dataArray.copy,isLastPage);
                }
            }
        }else{
            [QMUITips showError:error.localizedDescription inView:AppKeyWindow hideAfterDelay:2];
            !failure?:failure();
        }
    }];
}

+ (void)dealHots:(NSArray *)hots searchHistories:(NSArray *)histories results:(void (^)(NSArray * _Nonnull))succeed
{
    CNLiveSearchHotsModel *model1 = nil;
    if (hots && hots.count > 0) {
        model1 = [CNLiveServicePresent dealDataSource:hots title:@"热度推荐" subtitle:@"" cellHeight:0 itemSize:CGSizeMake((SCREEN_WIDTH-2*margin)/4.0, 80)showNum:0];
    }
   
    NSMutableArray *array2 = [NSMutableArray array];
    CNLiveSearchHotsModel *model2 = nil;
    if (histories && histories.count > 0) {
        for (NSDictionary *dic in histories) {
            CNLiveHistoryModel *model = [CNLiveHistoryModel mj_objectWithKeyValues:dic];
            [array2 addObject:model];
        }
      
        NSDictionary *dic2 = @{
            @"title":@"历史搜索",
            @"lists":array2,
            @"type" :@(8),
            @"layout": @{
                @"height":@(29),
                @"width":@((SCREEN_WIDTH-4*margin)/3.0),
            },
        };
       model2 = [CNLiveSearchHotsModel mj_objectWithKeyValues:dic2];
    }
    
    NSMutableArray *array3 = [NSMutableArray array];
    if (model1) {
        [array3 addObject:model1];
    }
    if (model2) {
        [array3 addObject:model2];
    }
    succeed(array3.copy);
}

+ (void)requestServiceListResult:(void (^)(NSArray * _Nonnull, NSArray * _Nonnull))result error:(void (^)(void))failure{
    NSDictionary * params = @{@"sid": CNUserShareModelUid ? CNUserShareModelUid : @""};
    
    [CNLiveNetworking setAllowRequestDefaultArgument:YES];
    [CNLiveNetworking setupShowDataResult:NO];
    [CNLiveNetworking setupShowResult:YES];
    
    [CNLiveNetworking requestNetworkWithMethod:CNLiveRequestMethodGET URLString:cn_API_Classify(@"/servingApi/servingPage") Param:params CacheType:CNLiveNetworkCacheTypeNetworkOnly CompletionBlock:^(NSURLSessionTask *requestTask, id responseObject, NSError *error) {
        CNLiveServiceModel * model = [CNLiveServiceModel mj_objectWithKeyValues:responseObject[@"data"]];
        CNLiveSearchHotsModel *categoryModel = nil;
        NSMutableArray *dataArray = [NSMutableArray array];
        if (model.categories&&[model.categories isKindOfClass:[NSArray class]] && model.categories.count>0) {
            CGFloat cellheight = 160;
            if (model.categories.count <= 4) {
                cellheight = 80;
            }
            categoryModel = [CNLiveServicePresent dealDataSource:model.categories title:@"" subtitle:@"" cellHeight:cellheight itemSize:CGSizeMake((SCREEN_WIDTH-2*margin)/4.0, 70)showNum:8];
            if (categoryModel) {
                [dataArray addObject:categoryModel];
            }
        }
        if (model.allList && model.allList.count > 0) {
            for (NSDictionary *dic in model.allList) {
                @autoreleasepool {
                    CNLiveSearchHotsModel *serviceModel = nil;
                    CGFloat cellheight = 0;
                    NSInteger showNum = 0;
                    NSString *title = dic[@"name"];
                    NSString *subTitle = @"";
                    CGSize itemSize = CGSizeMake(0, 0);
                    NSArray *lists = dic[@"list"];
                    NSString *showTitle = dic[@"category"][@"showTitle"];
                    if (![showTitle isKindOfClass:[NSNull class]] && !showTitle.boolValue) {
                        title = @"";
                    }
                    if ([dic[@"name"] isEqualToString:@"中国服务号"]) {
                            cellheight = 160;
                            if (lists.count <= 2) {
                                cellheight = 90;
                            }
                            showNum = 4;
                            itemSize = CGSizeMake((KScreenWidth - 3*margin)/2, 60);
                    }else if ([dic[@"name"] isEqualToString:@"中国媒体号"] || [dic[@"name"] isEqualToString:@"中国网中国号"]) {
                            cellheight = 190;
                            if (lists.count <= 4) {
                                cellheight = 105;
                            }
                            showNum = 8;
                            itemSize = CGSizeMake((SCREEN_WIDTH-2*margin)/4.0, 70);
                    }else{
                        showNum = 4;
                        itemSize = CGSizeMake((SCREEN_WIDTH-2*margin)/4.0, 70);
                        subTitle = dic[@"category"][@"subTitle"];
                        if ([subTitle isKindOfClass:[NSString class]] && ![subTitle isEqualToString:@""]) {
                            cellheight = 125;
                        }else{
                            cellheight = 105;
                            subTitle = @"";
                        }
                    }
                    if (lists &&[lists isKindOfClass:[NSArray class]] && lists.count > 0) {
                        serviceModel = [CNLiveServicePresent dealDataSource:dic[@"list"] title:title subtitle:subTitle cellHeight:cellheight itemSize:itemSize showNum:showNum];
                    }
                    if (serviceModel) {
                        [dataArray addObject:serviceModel];
                    }
                }
                
            }
        }
        
       
            if (model) {
                !result?:result(dataArray.copy,model.hots);
            }else{
                [QMUITips showError:error.localizedDescription inView:AppKeyWindow hideAfterDelay:3];
                !failure?:failure();
            }
    }];
}

+ (CNLiveSearchHotsModel *) dealDataSource:(NSArray *)array title:(NSString *)title subtitle:(NSString *)subTitle cellHeight:(CGFloat)cellHeight itemSize:(CGSize) size showNum:(NSInteger)num{
    NSMutableArray *categories = [NSMutableArray array];
    NSMutableArray *squreArray = [NSMutableArray array];
    for (int i = 0; i< array.count ;i++ ) {
        NSDictionary *dic = array[i];
        NSObject *model = nil;
        if ([title isEqualToString:@""] && [subTitle isEqualToString:@""]) {
            model = [CNCategoryModel mj_objectWithKeyValues:dic];
        }else{
        model = [CNLiveSearchModel mj_objectWithKeyValues:dic];
        }
        [categories addObject:model];
        if (num != 0 && (i != 0 ||  array.count == 1) &&((i + 1)%num == 0 || i == array.count - 1)) {
            NSDictionary *category = @{
                @"title":title,
                @"subTitle":subTitle,
                @"lists":categories.copy,
                @"cellHeight":@(cellHeight),
                @"layout":@{
                    @"width":@(size.width),
                    @"height":@(size.height)
                }
            };
            CNLiveSearchHotsModel *model = [CNLiveSearchHotsModel mj_objectWithKeyValues:category];
            [squreArray addObject:model];
            [categories removeAllObjects];
        }
    }
    if (categories && num !=0 && categories.count == 0) {
        NSDictionary *category = @{
            @"title":title,
            @"subTitle":subTitle,
            @"lists":squreArray.copy,
            @"cellHeight":@(cellHeight),
            @"layout":@{
                @"width":@(size.width),
                @"height":@(size.height)
            }
        };
        CNLiveSearchHotsModel *model = [CNLiveSearchHotsModel mj_objectWithKeyValues:category];
        [categories addObject:model];
    }
    NSDictionary *category = @{
        @"title":title,
        @"subTitle":subTitle,
        @"lists":categories.copy,
        @"cellHeight":@(cellHeight),
        @"layout":@{
            @"width":@(size.width),
            @"height":@(size.height)
        }
    };
    CNLiveSearchHotsModel *model = [CNLiveSearchHotsModel mj_objectWithKeyValues:category];
    return model;
}

+ (void)requesrServiceGetPageResult:(void (^)(NSArray * _Nonnull))result error:(void (^)(void))failure
{
    NSDictionary * params = @{@"sid": CNUserShareModelUid ? CNUserShareModelUid : @"",
                              @"pageId":@"10"
    };
    
    [CNLiveNetworking setAllowRequestDefaultArgument:YES];
    [CNLiveNetworking setupShowDataResult:NO];
    [CNLiveNetworking setupShowResult:YES];
    
    [CNLiveNetworking requestNetworkWithMethod:CNLiveRequestMethodGET URLString:cn_API_Classify(@"/contentApi/getPage") Param:params CacheType:CNLiveNetworkCacheTypeNetworkOnly CompletionBlock:^(NSURLSessionTask *requestTask, id responseObject, NSError *error) {
        NSArray *array = responseObject[@"data"];
        NSMutableArray *dataArray = [NSMutableArray array];
        if (array &&[array isKindOfClass:[NSArray class]]) {
            for (int i = 0;i < array.count;i ++) {
                NSMutableDictionary *mDic = [[NSMutableDictionary alloc] initWithDictionary:array[i]];
                NSArray *contents = mDic[@"contents"];
                if ([mDic[@"blockName"] isEqualToString:@"疫情服务专区"]) {
                    [mDic setObject:array[i + 1][@"contents"] forKey:@"rightLists"];
                    [mDic setObject:@(214*KScreenWidth/375 ) forKey:@"cellHeight"];
                }else if ([mDic[@"blockName"] isEqualToString:@"大家都在用"]){
                    [mDic setObject:@(230*KScreenWidth/375 ) forKey:@"cellHeight"];
                }else if ([mDic[@"blockName"] isEqualToString:@"轮播"]){
                    [mDic setObject:@(87*KScreenWidth/375) forKey:@"cellHeight"];
                }else if ([mDic[@"blockName"] isEqualToString:@"热销排行"]){
                    [mDic setObject:@(90) forKey:@"cellHeight"];
                }else{
                    [mDic setObject:@(170) forKey:@"cellHeight"];
                }
                
                if (![mDic[@"blockName"] isEqualToString:@"疫情服务"] && contents&&[contents isKindOfClass:[NSArray class]] && contents.count>0){
                    CNliveServicePageModel *model = [CNliveServicePageModel mj_objectWithKeyValues:mDic];
                    [dataArray addObject:model];
                }
            }
            if (array) {
                !result?:result(dataArray.copy);
            }else{
                [QMUITips showError:error.localizedDescription inView:AppKeyWindow hideAfterDelay:3];
                !failure?:failure();
            }
        }
    }];
}

+ (void)loadMyServicepage:(NSString *)page result:(nonnull void (^)(NSArray * _Nonnull, BOOL))succeed error:(nonnull void (^)(void))failure{
    NSDictionary * params = @{@"sid": CNUserShareModelUid ? CNUserShareModelUid : @"",
                              @"pageSize":@"100",
                              @"type":@"2",
                              @"page":page?page:@""
                              
    };
    
    [CNLiveNetworking setAllowRequestDefaultArgument:YES];
    [CNLiveNetworking setupShowDataResult:NO];
    [CNLiveNetworking setupShowResult:YES];
    
    [CNLiveNetworking requestNetworkWithMethod:CNLiveRequestMethodGET URLString:cn_API_Classify(@"/servingApi/servingList") Param:params CacheType:CNLiveNetworkCacheTypeNetworkOnly CompletionBlock:^(NSURLSessionTask *requestTask, id responseObject, NSError *error) {
        NSDictionary * dic = responseObject[@"data"];
        NSMutableArray *array = [NSMutableArray array];
        if (dic) {
            if (dic[@"list"]&&[dic[@"list"] isKindOfClass:[NSArray class]]) {
                NSArray *list = dic[@"list"];
                for (NSDictionary *dict in list) {
                    CNLiveSearchModel *searchModel = [CNLiveSearchModel mj_objectWithKeyValues:dict];
                    [array addObject:searchModel];
                }
            }
        }
        
            if (dic) {
                NSString *lastPage = dic[@"hasNextPage"];
                !succeed?:succeed(array.copy,!lastPage.boolValue);
            }else{
                [QMUITips showError:error.localizedDescription inView:AppKeyWindow hideAfterDelay:3];
                !failure?:failure();
            }
        
    }];
}

+ (void)usedServiceWithServingId:(NSString *)servingId{
    NSDictionary * params = @{@"sid": CNUserShareModelUid ? CNUserShareModelUid : @"",
                              @"servingId":servingId?servingId:@""};
    [CNLiveNetworking setAllowRequestDefaultArgument:YES];
    [CNLiveNetworking setupShowDataResult:NO];
    [CNLiveNetworking setupShowResult:YES];
    [CNLiveNetworking requestNetworkWithMethod:CNLiveRequestMethodPOST URLString:cn_API_Classify(@"/servingApi/click") Param:params CacheType:CNLiveNetworkCacheTypeNetworkOnly CompletionBlock:^(NSURLSessionTask *requestTask, id responseObject, NSError *error) {
      
    }];
}

+ (void)removeMyServiceResult:(void (^) (void)) succeed{
    NSDictionary * params = @{@"sid": CNUserShareModelUid ? CNUserShareModelUid : @"",
                              @"id":@""
    };
    
    [CNLiveNetworking setAllowRequestDefaultArgument:YES];
    [CNLiveNetworking setupShowDataResult:NO];
    [CNLiveNetworking setupShowResult:YES];
    
    [CNLiveNetworking requestNetworkWithMethod:CNLiveRequestMethodPOST URLString:cn_API_Classify(@"/servingApi/removeMyNewest") Param:params CacheType:CNLiveNetworkCacheTypeNetworkOnly CompletionBlock:^(NSURLSessionTask *requestTask, id responseObject, NSError *error) {
        if (!error) {
            succeed();
        }else{
            [QMUITips showError:error.localizedDescription inView:AppKeyWindow hideAfterDelay:3];
        }
    }];
}

+ (void)loadAllServiceWithServiceId:(NSString *)serviceId page:(nonnull NSString *)page result:(nonnull void (^)(NSArray * _Nonnull, BOOL))succeed error:(void (^)(void))failure
{
    NSDictionary * params = @{@"sid": CNUserShareModelUid ? CNUserShareModelUid : @"",
                              @"categoryId":serviceId?serviceId:@"",
                              @"page":page?page:@""
    };
    
    [CNLiveNetworking setAllowRequestDefaultArgument:YES];
    [CNLiveNetworking setupShowDataResult:NO];
    [CNLiveNetworking setupShowResult:YES];
    
    [CNLiveNetworking requestNetworkWithMethod:CNLiveRequestMethodGET URLString:cn_API_Classify(@"/servingApi/allCategory") Param:params CacheType:CNLiveNetworkCacheTypeNetworkOnly CompletionBlock:^(NSURLSessionTask *requestTask, id responseObject, NSError *error) {
        NSDictionary * dic = responseObject[@"data"];
        NSMutableArray *array = [NSMutableArray array];
        if (dic) {
            if (dic[@"list"]&&[dic[@"list"] isKindOfClass:[NSArray class]]) {
                NSArray *list = dic[@"list"];
                
                for (NSDictionary *dict in list) {
                    NSDictionary *dictionary = @{
                        @"title":dict[@"title"],
                        @"lists":dict[@"list"],
                        @"layout":@{
                            @"width":@((SCREEN_WIDTH-2*margin)/4.0),
                            @"height":@(70)
                        }
                    };
                    CNLiveSearchHotsModel *searchModel = [CNLiveSearchHotsModel mj_objectWithKeyValues:dictionary];
                    [array addObject:searchModel];
                }
            }
        }
        
        
            if (dic) {
                NSString *lastPage = dic[@"hasNextPage"];
                !succeed?:succeed(array.copy,!lastPage.boolValue);
            }else{
                [QMUITips showError:error.localizedDescription inView:AppKeyWindow hideAfterDelay:3];
                !failure?:failure();
            }
        
    }];
}

+ (void)loadServiceInfoServiceId:(NSString *)serviceId result:(nonnull void (^)(CNLiveSearchModel * _Nonnull))succeed error:(void(^)(void))failure
{
    NSDictionary * params = @{@"sid": CNUserShareModelUid ? CNUserShareModelUid : @"",
                              @"serviceId":serviceId?serviceId:@""
    };
    
    [CNLiveNetworking setAllowRequestDefaultArgument:YES];
    [CNLiveNetworking setupShowDataResult:NO];
    [CNLiveNetworking setupShowResult:YES];
    [CNLiveNetworking requestNetworkWithMethod:CNLiveRequestMethodGET URLString:cn_API_Classify(@"/contentApi/getServiceInfo") Param:params CacheType:CNLiveNetworkCacheTypeNetworkOnly CompletionBlock:^(NSURLSessionTask *requestTask, id responseObject, NSError *error) {
        CNLiveSearchModel *model = [CNLiveSearchModel mj_objectWithKeyValues:responseObject[@"data"]];
        if (model) {
            !succeed?:succeed(model);
        }else{
            [QMUITips showError:error.localizedDescription inView:AppKeyWindow hideAfterDelay:2];
            !failure?:failure();
        }
    }];
}
@end