// // KWMOrderVC.m // iCemarose // // Created by HouWeiBin on 16/8/30. // Copyright © 2016年 kollway. All rights reserved. // #import "KWMOrderVC.h" #import "KWMOrderCell.h" #import "KWMNewProductVC.h" #import "KWMImageUtil.h" #import "KWMStringUtil.h" #import "MJRefresh.h" @interface KWMOrderVC () @property (nonatomic) NSMutableArray *productList;//订单商品列表 @property (nonatomic) NSMutableArray *expandOrderId;//标记展开的section @end @implementation KWMOrderVC{ } +(NSString *)kwmTag{ return @"KWMOrderVC"; } -(void)awakeFromNib{ [super awakeFromNib]; self.title = @"我的订单"; } -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:NO]; } -(void)viewDidLoad{ [super viewDidLoad]; [self setUpData]; } -(void)setUpData{ self.productList = [NSMutableArray array]; self.expandOrderId = [NSMutableArray array]; } -(void)loadData{ [self requestNewOrderAPI]; } -(UITableView *)targetTableView{ return self.tbvOrder; } -(BUYOrder *)getPaidOrder{ if(self.paidCheckout){ BUYOrder *order = [[BUYOrder alloc]init]; order.checkout = self.paidCheckout; order.lineItems = self.paidCheckout.lineItems; order.totalPrice = self.paidCheckout.totalPrice; return order; }else{ return nil; } } -(NSString *)getProductImage:(NSNumber *)productId{ NSString *productImage = @""; if(productId){ for(BUYProduct *product in self.productList){ if([product.identifier isEqualToNumber:productId]){ productImage = [KWMImageUtil getProductImageUrl:product ImageSize:LowImage]; } } } return productImage; } -(BOOL)isContainId:(NSArray *)productIds productId:(NSNumber *)productId{ for(NSNumber *mProductId in productIds){ if([mProductId isEqualToNumber:productId]){ return YES; } } return NO; } //每一个section有多少行 - (NSInteger)getRowCountBySection:(NSInteger)section{ BUYOrder *order = [self.dataList objectAtIndex:section]; NSArray<BUYLineItem *> *arr = [order.lineItems array]; return arr?arr.count:0; } //将商品数量小于4的订单(完全展开的订单)添加到openSection中 -(void)refreshOpenSection:(NSArray<BUYOrder *> *)array{ if(!array){ return; } for(BUYOrder *order in array){ NSArray<BUYLineItem *> *arr = [order.lineItems array]; if(arr && arr.count > 4){ return; }else if(order.identifier && ![self.expandOrderId containsObject:order.identifier]){ [self.expandOrderId addObject:order.identifier]; } } } #pragma mark -- UITableView Delegate - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return self.dataList.count; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ bool isExpend = YES; BUYOrder *order = [self.dataList objectAtIndex:section]; NSArray<BUYLineItem *> *lineItems = [order.lineItems array]; if(order.identifier){ isExpend = [self.expandOrderId containsObject:order.identifier]; } if(!lineItems){ return 0; } if(!isExpend && lineItems.count >= 4){ return 4; } return lineItems.count; } -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ bool isExpend = YES; BUYOrder *order = [self.dataList objectAtIndex:indexPath.section]; if(order.identifier){ isExpend = [self.expandOrderId containsObject:order.identifier]; } NSInteger rowCount = [self getRowCountBySection:indexPath.section]; NSInteger lastRow = rowCount -1; NSInteger firstRow = 0; CGFloat h = 165; CGFloat head = 45; CGFloat bot = 40; if(indexPath.row == 3 && !isExpend){ return h - head; } if(indexPath.row == lastRow && rowCount >4){ return h - head; } if(indexPath.row == firstRow){ return h - bot; } return h - head -bot; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ NSString *indentifier = @"KWMOrderCell"; bool isExpend = YES; KWMOrderCell *orderCell = [tableView dequeueReusableCellWithIdentifier:indentifier]; if (!orderCell) { [tableView registerNib:[UINib nibWithNibName:indentifier bundle:nil] forCellReuseIdentifier:indentifier]; orderCell = [tableView dequeueReusableCellWithIdentifier:indentifier]; } //设置cell图片为默认图 orderCell.ivImage.image = [UIImage imageNamed:@"ic_loading"]; orderCell.markSection = indexPath.section; BUYOrder *order = [self.dataList objectAtIndex:indexPath.section]; if(order.identifier){ isExpend = [self.expandOrderId containsObject:order.identifier]; } NSArray<BUYLineItem *> *arr = [order.lineItems array]; if(!arr){ return orderCell; } BUYLineItem *lineItem = [arr objectAtIndex:indexPath.row]; orderCell.lineItem = lineItem; //当前section行数 orderCell.lineCount = [self getRowCountBySection:indexPath.section]; orderCell.order = [self.dataList objectAtIndex:indexPath.section]; orderCell.markSection = indexPath.section; orderCell.imageUrl = [self getProductImage:lineItem.productId]; [orderCell updateUI:indexPath.row productCount:arr.count showAll:isExpend]; orderCell.delegate = self; return orderCell; } #pragma mark -- KWMOrderCellDelegate -(void)kwm_onClickShowAllWith:(NSInteger)markSection And:(BOOL)showAll{ BUYOrder *order = [self.dataList objectAtIndex:markSection]; if(order.identifier){ if (showAll) { [self.expandOrderId removeObject:order.identifier]; }else{ [self.expandOrderId addObject:order.identifier]; } } [self.tbvOrder reloadData]; } - (void)kwm_onClickProduct:(NSNumber *)productId{ KWMNewProductVC *productDetailVC = [KWMNewProductVC getNewInstance]; productDetailVC.productId = productId; [self.navigationController pushViewController:productDetailVC animated:YES]; } -(void)kwm_onClickTrandsport:(BUYOrder *)order{ } -(void)kwm_onClickCancelOrder:(BUYOrder *)order{ } #pragma mark -- API //获取全部订单API - (void)requestNewOrderAPI{ [self showLoading]; __weak KWMOrderVC *weakSelf = self; NSInteger targetPage = self.currentPage.integerValue + 1; self.tbvOrder.mj_footer.hidden = YES; NSDictionary *parameters = @{ @"page":@(targetPage).stringValue }; [self.api getOrderList:parameters success:^(NSURLSessionDataTask *task, KWMOrderListResult *result) { [weakSelf hideLoading]; if(!result.code || result.code.integerValue != 1000){ if(result.message){ [weakSelf showToast:result.message]; } return; } if (result.data) { NSMutableArray *showOrders = [NSMutableArray arrayWithArray:result.data]; BUYOrder *paidOrder = [self getPaidOrder]; if(paidOrder && targetPage ==1){ [showOrders insertObject:paidOrder atIndex:0]; } // if(showOrders.count <= 50){ // weakSelf.hasNextPage = false; // weakSelf.tbvOrder.mj_footer.hidden = YES; // }else{ // weakSelf.hasNextPage = true; // weakSelf.tbvOrder.mj_footer.hidden = NO; // } if(targetPage == 1){ [weakSelf.dataList removeAllObjects]; [self.expandOrderId removeAllObjects]; } [weakSelf refreshOpenSection:showOrders]; [weakSelf appendDataList:showOrders setPage:targetPage]; [weakSelf requestProductsApi]; } } failure:^(NSURLSessionDataTask *task, NSError *error) { [weakSelf hideLoading]; [weakSelf showError:error]; }]; } //获取订单API - (void)requestOrderAPI{ // [self showLoading]; __weak KWMOrderVC *weakSelf = self; self.client.customerToken = [BUYCustomerToken customerTokenWithJSONDictionary:[[NSUserDefaults standardUserDefaults] objectForKey:@"token"]]; [self.client getOrdersForCustomerCallback:^(NSArray<BUYOrder *> * _Nullable orders, NSError * _Nullable error) { // [weakSelf hideLoading]; // NSMutableArray *showOrders = [NSMutableArray arrayWithArray:orders]; // if (error == nil && orders != nil ) { // BUYOrder *paidOrder = [self getPaidOrder]; // if(paidOrder){ // [showOrders insertObject:paidOrder atIndex:0]; // } // [weakSelf.dataList removeAllObjects]; // [weakSelf refreshOpenSection:showOrders]; // [weakSelf appendDataList:showOrders setPage:1]; // weakSelf.hasNextPage = false; // [weakSelf requestProductsApi]; // }else if (error != nil){ // [weakSelf showError:error]; // } }]; } //获取订单商品列表,从而拿到图片(因为订单api返回的订单数据中没有商品图片数据) -(void)requestProductsApi{ if(!self.dataList){ return; } NSMutableArray *productIds = [NSMutableArray array]; for(BUYOrder *order in self.dataList){ NSArray *lineItems = order.lineItemsArray; if(lineItems){ for(BUYLineItem *lineItem in lineItems){ //当该商品被删除后,productId有可能为空 if(lineItem.productId && ![self isContainId:productIds productId:lineItem.productId]){ [productIds addObject:lineItem.productId]; } } } } if(productIds.count == 0){ return; } __weak KWMOrderVC *weakSelf = self; NSArray *productIdsArray = [KWMStringUtil splitArray:productIds withSubSize:50]; for(NSArray *mProductIds in productIdsArray){ //经过测试,该api一次最多返回50个product,所以如果有100个商品,需要分成两次请求 [self.client getProductsByIds:mProductIds completion:^(NSArray<BUYProduct *> * _Nullable products, NSError * _Nullable error) { if (!error && products != nil && products.count>0) { [weakSelf.productList addObjectsFromArray:products]; [weakSelf.tbvOrder reloadData]; }else if (error != nil){ [weakSelf showError:error]; } }]; } } -(void)requestCancelOrder:(NSNumber *)orderId{ if(orderId == nil){ return; } __weak KWMOrderVC *weakSelf = self; void(^failure)(NSURLSessionDataTask *,NSError *) = ^(NSURLSessionDataTask *task,NSError *error){ [weakSelf hideLoading]; [weakSelf showError:error]; }; void(^success)(NSURLSessionDataTask *,KWMCemaroseResult *) = ^(NSURLSessionDataTask *task,KWMCemaroseResult *result){ [weakSelf hideLoading]; if(result!=nil){ [weakSelf hideLoading]; [weakSelf requestOrderAPI]; } }; NSDictionary *parameters = @{ @"reason":@"customer" }; [self.api cancelOrder:parameters orderId:orderId success:success failure:failure]; [self showLoading]; } -(void)requestOrderStatus:(NSNumber *)orderId{ [self showToast:@"正在获取订单状态"]; if(orderId == nil){ return; } __weak KWMOrderVC *weakSelf = self; void(^failure)(NSURLSessionDataTask *,NSError *) = ^(NSURLSessionDataTask *task,NSError *error){ [weakSelf hideLoading]; [weakSelf showToast:@"获取订单状态失败"]; }; void(^success)(NSURLSessionDataTask *,KWMOrdersResult *) = ^(NSURLSessionDataTask *task,KWMOrdersResult *result){ [weakSelf hideLoading]; if(result!=nil && result.orders!=nil && result.orders.count>0){ KWMOrder *order = result.orders.firstObject; if(order.fulfillmentStatus){ if([order.fulfillmentStatus isEqualToString:@"partial"]){ [weakSelf showToast:@"该订单已经配送,无法取消"]; }else if([order.fulfillmentStatus isEqualToString:@"fulfilled"]){ [weakSelf showToast:@"该订单已经配送,无法取消"]; } }else if(order.cancelReason){ [weakSelf showToast:[NSString stringWithFormat:@"该订单已被取消,取消原因:%@",order.cancelReason]]; } else if(order.closedAt){ [weakSelf showToast:[NSString stringWithFormat:@"该订单已于%@被关闭",order.closedAt]]; }else{ UIAlertController *alertOne = [UIAlertController alertControllerWithTitle:@"提示" message:@"是否取消该订单" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]; [alertOne addAction:cancel]; UIAlertAction *certain = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){ [self requestCancelOrder:orderId]; }]; [alertOne addAction:certain]; [weakSelf presentViewController:alertOne animated:YES completion:nil]; } }else{ [weakSelf showToast:@"未查询到该订单"]; } }; [self.api getAdminOrder:nil orderId:orderId success:success failure:failure]; [self showLoading]; } @end