// // RADataProvider.m // Apex And Drivers // // Created by Jack on 2018/6/1. // Copyright © 2018年 USAI. All rights reserved. // #import "RADataProvider.h" #import "NetworkUtils.h" #import "AESCrypt.h" #import "RAOfflineHandler.h" #import @implementation RADataProvider +(NSMutableDictionary*) prepare_addtional_params:(NSMutableDictionary* ) params { if (params == nil) { params = [NSMutableDictionary dictionary]; } NSString *user = params[@"name"]; if (!user) { user = RASingleton.sharedInstance.encryptUser; if (user) { params[@"name"] = user; } } NSString *password = params[@"password"]; if (!password) { password = RASingleton.sharedInstance.encryptPassword; if (password) { params[@"password"] = password; } } [params setObject:@"iOS" forKey:@"platform"]; NSDictionary* infoDict =[[NSBundle mainBundle] infoDictionary]; NSString* short_version =[infoDict objectForKey:@"CFBundleShortVersionString"]; [params setValue:short_version forKey:@"app_short_ver"]; NSString *localeLanguageCode = [[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode]; [params setValue:localeLanguageCode forKey:@"language"]; #if TARGET_IPHONE_SIMULATOR//模拟器 [params setValue:@"simulator_uuid" forKey:@"deviceid"]; #elif TARGET_OS_IPHONE//真机 UIDevice * dev = [UIDevice currentDevice]; NSUUID* uuid =dev.identifierForVendor; [params setValue:uuid.UUIDString forKey:@"deviceid"]; #endif return params; } +(NSData*)get_json : (NSString*) url parameters:(NSMutableDictionary *) params file:(NSString *) file //delegate:(id < NSURLConnectionDelegate >)delegate { params = [self prepare_addtional_params:params]; return [NetworkUtils get_json:url parameters:params file:file err_recorder:URL_ERR_LOG result_handler:^NSMutableDictionary *(NSMutableDictionary *jsobj) { int result=[[jsobj valueForKey:@"result"] intValue]; switch (result) { case -9: case 0: [jsobj setValue:MSG_USERAUTH_ERROR forKey:@"err_msg"]; break; case 1: [jsobj setValue:MSG_ERROR forKey:@"err_msg"]; break; case RESULT_TRUE: [jsobj setValue:MSG_SUCCESS forKey:@"err_msg"]; break; case 9: [jsobj setValue:[jsobj valueForKey:@"msg"] forKey:@"err_msg"]; break; case RESULT_TIMEOUT: [jsobj setValue:MSG_TIMEOUT forKey:@"err_msg"]; break; default: { NSString *msg = [jsobj valueForKey:@"msg"]; if (msg.length == 0) { [jsobj setValue:MSG_ERROR forKey:@"err_msg"]; } else { [jsobj setValue:msg forKey:@"err_msg"]; } } break; } return jsobj; } decrypt_handler:^NSMutableDictionary *(NSMutableDictionary *jsobj) { NSString* base64str = jsobj[@"str"]; NSString* decryptstr=[AESCrypt AES128Decrypt:base64str key:@"Usai2010"]; jsobj=[[RAConvertor string2dict:decryptstr] mutableCopy]; return jsobj; }]; /* */ return nil; } + (NSDictionary *)handleJsonData:(NSData *)jsonData { if (jsonData==nil) { return @{ @"result" : @RESULT_NET_ERROR, @"err_msg" : MSG_NET_ERROR }; } NSDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil]; return json; } + (NSDictionary *)requestLogin:(NSString *)user password:(NSString *)pwd { NSMutableDictionary *params = [NSMutableDictionary dictionary]; user = [[RASingleton sharedInstance] encryptString:user]; pwd = [[RASingleton sharedInstance] encryptString:pwd]; [params setObject:user forKey:@"name"]; [params setObject:pwd forKey:@"password"]; NSData* json=[self get_json:URL_LOGIN parameters:params file:nil]; return [self handleJsonData:json]; } + (NSDictionary *)requestRetrievePassword : (NSString*)user email:(NSString*)email { // if(![NetworkUtils IsNetworkAvailable]) // return RESULT_NET_NOTAVAILABLE; NSMutableDictionary * params = [[NSMutableDictionary alloc] init]; [params setValue:user forKey:@"name"]; [params setValue:email forKey:@"email"]; [params setValue:@"Retrieve Password" forKey:@"module_name"]; [params setValue:@"handset_search" forKey:@"action"]; NSData* json=[self get_json:URL_RETRIVE_PASSWORD parameters:params file:nil]; // if (json==nil) // { // DebugLog(@"json is wrong"); // return RESULT_NET_ERROR; // } // // NSError *error=nil; // NSDictionary *jsobj = [NSJSONSerialization JSONObjectWithData:json options:NSJSONReadingMutableLeaves error:&error]; // if(jsobj) // { // int result = [[jsobj valueForKey:@"result"] intValue]; // if(result!=AP_USER_AUTH) // { // DebugLog(@"USER NOT AUTHORIZED CODE=%d ",result); // return RESULT_FALSE; // // } // return RESULT_TRUE; // // } // return RESULT_NET_ERROR; return [self handleJsonData:json]; } + (NSDictionary *)requestOrderList { if (RASingleton.sharedInstance.offline) { NSDictionary *result = [[RAOfflineHandler defaultHandler] requestOfflineHome]; if (result) { return result; } } NSMutableDictionary *params = [NSMutableDictionary dictionary]; NSData* json=[self get_json:URL_HOME parameters:params file:nil]; NSMutableDictionary* ret= ((NSDictionary*)[RAConvertor data2dict:json]).mutableCopy; NSString* path = [[RAUtils appCacheDirectory] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_orderList.json",RASingleton.sharedInstance.user]]; if(ret!=nil&&[ret[@"result"] intValue]!=RESULT_NET_ERROR&&[ret[@"result"] intValue]!=RESULT_NET_NOTAVAILABLE) { [ret writeToFile:path atomically:YES]; return ret; } else { NSFileManager* fm = [NSFileManager defaultManager]; BOOL isDir = NO; if ([fm fileExistsAtPath:path isDirectory:&isDir]) { ret=[NSDictionary dictionaryWithContentsOfFile:path].mutableCopy; ret[@"iscache"]=@(true); return ret; } else { return [self handleJsonData:json]; } } } + (NSDictionary *)requestMoreOrder:(NSInteger)orderType offset:(NSInteger)offset limit:(NSInteger)limit filter:(NSDictionary *)filter { NSMutableDictionary *params = [NSMutableDictionary dictionary]; [params setObject:@(orderType) forKey:@"type"]; [params setObject:@(offset) forKey:@"offset"]; [params setObject:@(limit) forKey:@"limit"]; if (filter) { [params setObject:[self dic2String:filter] forKey:@"filter"]; } NSData* json=[self get_json:URL_MORE_ORDER parameters:params file:nil]; NSMutableDictionary* ret= ((NSDictionary*)[RAConvertor data2dict:json]).mutableCopy; NSString* path = [[RAUtils appCacheDirectory] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_moreorder%@.json",RASingleton.sharedInstance.user,@(orderType)]]; if(offset==0&&ret!=nil&&[ret[@"result"] intValue]!=RESULT_NET_ERROR&&[ret[@"result"] intValue]!=RESULT_NET_NOTAVAILABLE) { [ret writeToFile:path atomically:YES]; return ret; } else { NSFileManager* fm = [NSFileManager defaultManager]; BOOL isDir = NO; if ([fm fileExistsAtPath:path isDirectory:&isDir]&&offset==0) { ret=[NSDictionary dictionaryWithContentsOfFile:path].mutableCopy; ret[@"iscache"]=@(true); return ret; } else { return [self handleJsonData:json]; } } return [self handleJsonData:json]; } + (NSDictionary *)requestOrderDetail:(NSString *)orderID type:(NSInteger)type type2:(NSString *)type2 statusNo:(NSString *)statusNo { if (RASingleton.sharedInstance.offline) { NSDictionary *result = [[RAOfflineHandler defaultHandler] requestOfflineDetailForOrder:orderID withOrderType:type]; if (result) { return result; } } NSMutableDictionary *params = [NSMutableDictionary dictionary]; if (orderID) { [params setObject:orderID forKey:@"orderID"]; } [params setObject:@(type) forKey:@"orderType"]; if (type2) { [params setObject:type2 forKey:@"orderType2"]; } if (statusNo) { [params setObject:statusNo forKey:@"statusNo"]; } NSData* json=[self get_json:URL_DETAIL parameters:params file:nil]; NSMutableDictionary* ret= ((NSDictionary*)[RAConvertor data2dict:json]).mutableCopy; NSString* path = [[RAUtils appCacheDirectory] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_detail_%@.json",RASingleton.sharedInstance.user,orderID]]; if(ret!=nil&&[ret[@"result"] intValue]!=RESULT_NET_ERROR&&[ret[@"result"] intValue]!=RESULT_NET_NOTAVAILABLE) { [ret writeToFile:path atomically:YES]; return ret; } else { NSFileManager* fm = [NSFileManager defaultManager]; BOOL isDir = NO; if ([fm fileExistsAtPath:path isDirectory:&isDir]) { ret=[NSDictionary dictionaryWithContentsOfFile:path].mutableCopy; ret[@"iscache"]=@(true); return ret; } else { return [self handleJsonData:json]; } } #ifdef OFFLINE_MODE NSNumber *finish = [[RAOfflineHandler defaultHandler] lastActionIndexForOrder:orderID]; detail = [[RAOfflineHandler defaultHandler] filtrateActionFromDetail:[detail mutableCopy] withFinishActions:finish]; #endif // return detail; } + (NSDictionary *)requestUpdateOrder:(NSString *)orderID driverAction:(NSInteger)action index:(NSInteger)idx { if (RASingleton.sharedInstance.offline) { NSDictionary *result = [[RAOfflineHandler defaultHandler] requestOfflineEditOrder:orderID withAction:idx]; if (result) { return result; } } // return [self loadFakeData:@"fake_order_edit.json"]; NSMutableDictionary *params = [NSMutableDictionary dictionary]; if (orderID) { [params setObject:orderID forKey:@"orderID"]; } [params setObject:@(action) forKey:@"action"]; NSData* json=[self get_json:URL_UPDATE parameters:params file:nil]; NSMutableDictionary* ret= ((NSDictionary*)[RAConvertor data2dict:json]).mutableCopy; NSString* path = [[RAUtils appCacheDirectory] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_%@_%@.json",RASingleton.sharedInstance.user,@(action),orderID]]; if(ret!=nil&&[ret[@"result"] intValue]!=RESULT_NET_ERROR&&[ret[@"result"] intValue]!=RESULT_NET_NOTAVAILABLE) { [ret writeToFile:path atomically:YES]; return ret; } else { NSFileManager* fm = [NSFileManager defaultManager]; BOOL isDir = NO; if ([fm fileExistsAtPath:path isDirectory:&isDir]) { ret=[NSDictionary dictionaryWithContentsOfFile:path].mutableCopy; ret[@"iscache"]=@(true); return ret; } else { return [self handleJsonData:json]; } } } + (NSDictionary *)reportOrder:(NSString *)orderId type:(NSInteger)type actionType:(NSInteger)action actionIndex:(NSInteger)actionIndex actionName:(NSString *)actionName toURL:(NSString *)url withParams:(NSMutableDictionary *)params { if (RASingleton.sharedInstance.offline) { NSDictionary *result = [[RAOfflineHandler defaultHandler] reportOrder:orderId type:type actionType:action actionIndex:actionIndex actionName:actionName withURL:url params:params]; if (result) { return result; } } NSData* json=[self get_json:url parameters:params file:nil]; NSDictionary *dic = [self handleJsonData:json]; int result = [[dic objectForKey:@"result"] intValue]; if (result == RESULT_TRUE) { [[RAOfflineHandler defaultHandler] updateLastAction:actionIndex forOrder:orderId]; } return dic; } + (NSDictionary *)offlineSubmitOrder:(NSString *)orderId action:(NSInteger)actionId title:(NSString *)title index:(NSInteger)idx withParams:(NSDictionary *)params photos:(NSArray *)photos cacheDir:(NSString *)dir { return [[RAOfflineHandler defaultHandler] updateOrder:orderId action:actionId title:title index:idx withParams:params photos:photos cacheDir:dir]; } + (NSDictionary *)submitEditOrder:(NSString *)orderId actionIndex:(NSInteger)actionIndex withParams:(NSMutableDictionary *)params { if (![params isKindOfClass:[NSMutableDictionary class]]) { params = [params mutableCopy]; } NSData* json=[self get_json:URL_SUBMIT parameters:params file:nil]; NSDictionary *dic = [self handleJsonData:json]; int result = [[dic objectForKey:@"result"] intValue]; if (result == RESULT_TRUE) { [[RAOfflineHandler defaultHandler] updateLastAction:actionIndex forOrder:orderId]; } return dic; } + (NSDictionary *)upload:(NSString*)url parameters:(NSMutableDictionary *)params file:(NSString*)file_path { if (![params isKindOfClass:[NSMutableDictionary class]]) { params = [params mutableCopy]; } NSData* json=[self get_json:url parameters:params file:file_path]; return [self handleJsonData:json]; } + (NSDictionary *)uploadFile:(NSString *)filePath parameters:(NSMutableDictionary *)params { return [self upload:URL_UPLOAD parameters:params file:filePath]; } + (NSDictionary *)reportLastLocation:(CLLocation *)location forOrderID:(NSString *)orderID locationID:(NSString *)locationId { NSMutableDictionary *params = [NSMutableDictionary dictionary]; NSString *latLon = nil; if (location) { latLon = [NSString stringWithFormat:@"%f,%f",location.coordinate.latitude,location.coordinate.longitude]; } else { latLon = @"-999,-999"; } if (latLon) { [params setObject:latLon forKey:@"location"]; } if (orderID) { [params setObject:orderID forKey:@"orderID"]; } if (location) { [params setObject:@(location.speed) forKey:@"speed"]; [params setObject:@([location.timestamp timeIntervalSince1970]) forKey:@"timestamp"]; } if (locationId) { [params setObject:locationId forKey:@"locationId"]; } NSString * lastLocationDateTime = RASingleton.sharedInstance.lastLocationDateTime; if(lastLocationDateTime.length>0) { [params setObject:lastLocationDateTime forKey:@"lastLocationDateTime"]; } [params setObject:@(0) forKey:@"userOption"]; // 0 表示同意发送位置 NSData* json=[self get_json:URL_REPORT_LOCATION parameters:params file:nil]; return [self handleJsonData:json]; } + (NSDictionary *)reportLocationWithUserReason:(NSString *)reason forOrder:(NSString *)orderID locationID:(NSString *)locationId { NSMutableDictionary *params = [NSMutableDictionary dictionary]; if (reason) { [params setObject:reason forKey:@"reason"]; } if (orderID) { [params setObject:orderID forKey:@"orderID"]; } if (locationId) { [params setObject:locationId forKey:@"locationId"]; } [params setObject:@(1) forKey:@"userOption"]; // 1 表示不同意发送位置 NSData* json=[self get_json:URL_REPORT_LOCATION parameters:params file:nil]; return [self handleJsonData:json]; } + (NSDictionary *)bindNotificationToken:(NSString *)token { if (token.length == 0) { return @{@"result" : @(0)}; } NSMutableDictionary *params = [NSMutableDictionary dictionary]; [params setObject:token forKey:@"token"]; NSData* json=[self get_json:URL_REPORT_TOKEN parameters:params file:nil]; return [self handleJsonData:json]; } + (NSDictionary *)logout { NSMutableDictionary *params = [NSMutableDictionary dictionary]; NSData* json=[self get_json:URL_LOGOUT parameters:params file:nil]; return [self handleJsonData:json]; } + (NSDictionary *)loadFakeData:(NSString *)fileName { NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:nil]; NSData *jsonData = [NSData dataWithContentsOfFile:path]; return [self handleJsonData:jsonData]; } //+ (NSDictionary *)fakeError { // // // return @{ // @"container_photo_0": @"12346798", // @"container_photo_1": @"78945612", // @"result": @2 // }; //} + (NSDictionary *)updateDriverAvailable:(BOOL)available { NSMutableDictionary *params = [NSMutableDictionary dictionary]; int a = available ? 1 : 0; [params setObject:@(a) forKey:@"available"]; NSData* json=[self get_json:URL_DRIVER_AVAILABLE parameters:params file:nil]; return [self handleJsonData:json]; } + (NSDictionary *)loadDataFromBundleFile:(NSString *)fileName { return [self loadFakeData:fileName]; } + (NSDictionary *)requestChange:(NSString *)old password:(NSString *)pass { NSMutableDictionary *params = [NSMutableDictionary dictionary]; if (old) { [params setObject:old forKey:@"oldPassword"]; } if (pass) { [params setObject:pass forKey:@"newPassword"]; } NSData* json=[self get_json:URL_CHANGE_PASSWORD parameters:params file:nil]; return [self handleJsonData:json]; } + (NSDictionary *)requestMessage:(NSInteger)offset limit:(NSInteger)limit unread:(BOOL)unread { NSMutableDictionary *params = [NSMutableDictionary dictionary]; [params setObject:@(offset) forKey:@"offset"]; [params setObject:@(limit) forKey:@"limit"]; [params setObject:@(unread) forKey:@"unread"]; NSData* json=[self get_json:URL_MESSAGE_LIST parameters:params file:nil]; return [self handleJsonData:json]; } + (void)downloadOfflineData { [[RAOfflineHandler defaultHandler] downloadOfflineData]; } #pragma mark - Utils + (NSString *)dic2String:(NSDictionary *)dic { if (!dic) { return nil; } NSData *data = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:nil]; NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; return str; } @end