RADataProvider.m 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. //
  2. // RADataProvider.m
  3. // Apex And Drivers
  4. //
  5. // Created by Jack on 2018/6/1.
  6. // Copyright © 2018年 USAI. All rights reserved.
  7. //
  8. #import "RADataProvider.h"
  9. #import "NetworkUtils.h"
  10. #import "ZipArchive.h"
  11. #import "AESCrypt.h"
  12. #import "RAOfflineHandler.h"
  13. @implementation RADataProvider
  14. +(NSMutableDictionary*) prepare_addtional_params:(NSMutableDictionary* ) params
  15. {
  16. if (params == nil) {
  17. params = [NSMutableDictionary dictionary];
  18. }
  19. NSString *user = RASingleton.sharedInstance.encryptUser;
  20. NSString *password = RASingleton.sharedInstance.encryptPassword;
  21. if (user.length && password.length) {
  22. [params setObject:user forKey:@"name"];
  23. [params setObject:password forKey:@"password"];
  24. }
  25. [params setObject:@"iOS" forKey:@"platform"];
  26. NSDictionary* infoDict =[[NSBundle mainBundle] infoDictionary];
  27. NSString* short_version =[infoDict objectForKey:@"CFBundleShortVersionString"];
  28. [params setValue:short_version forKey:@"app_short_ver"];
  29. #if TARGET_IPHONE_SIMULATOR//模拟器
  30. [params setValue:@"simulator_uuid" forKey:@"deviceid"];
  31. #elif TARGET_OS_IPHONE//真机
  32. UIDevice * dev = [UIDevice currentDevice];
  33. NSUUID* uuid =dev.identifierForVendor;
  34. [params setValue:uuid.UUIDString forKey:@"deviceid"];
  35. #endif
  36. return params;
  37. }
  38. +(NSData*)get_json : (NSString*) url parameters:(NSMutableDictionary *) params file:(NSString *) file //delegate:(id < NSURLConnectionDelegate >)delegate
  39. {
  40. params = [self prepare_addtional_params:params];
  41. return [NetworkUtils get_json:url parameters:params file:file err_recorder:URL_ERR_LOG result_handler:^NSMutableDictionary *(NSMutableDictionary *jsobj) {
  42. int result=[[jsobj valueForKey:@"result"] intValue];
  43. switch (result) {
  44. case -9:
  45. case 0:
  46. [jsobj setValue:MSG_USERAUTH_ERROR forKey:@"err_msg"];
  47. break;
  48. case 1:
  49. [jsobj setValue:MSG_ERROR forKey:@"err_msg"];
  50. break;
  51. case RESULT_TRUE:
  52. [jsobj setValue:MSG_SUCCESS forKey:@"err_msg"];
  53. break;
  54. case 9:
  55. [jsobj setValue:[jsobj valueForKey:@"msg"] forKey:@"err_msg"];
  56. break;
  57. case RESULT_TIMEOUT:
  58. [jsobj setValue:MSG_TIMEOUT forKey:@"err_msg"];
  59. break;
  60. default: {
  61. NSString *msg = [jsobj valueForKey:@"msg"];
  62. if (msg.length == 0) {
  63. [jsobj setValue:MSG_ERROR forKey:@"err_msg"];
  64. } else {
  65. [jsobj setValue:msg forKey:@"err_msg"];
  66. }
  67. }
  68. break;
  69. }
  70. return jsobj;
  71. } decrypt_handler:^NSMutableDictionary *(NSMutableDictionary *jsobj) {
  72. NSString* base64str = jsobj[@"str"];
  73. NSString* decryptstr=[AESCrypt AES128Decrypt:base64str key:@"Usai2010"];
  74. jsobj=[[RAConvertor string2dict:decryptstr] mutableCopy];
  75. return jsobj;
  76. }];
  77. /*
  78. */
  79. return nil;
  80. }
  81. + (NSDictionary *)handleJsonData:(NSData *)jsonData {
  82. if (jsonData==nil)
  83. {
  84. return @{
  85. @"result" : @RESULT_NET_ERROR,
  86. @"err_msg" : MSG_NET_ERROR
  87. };
  88. }
  89. NSDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
  90. return json;
  91. }
  92. + (NSDictionary *)requestLogin:(NSString *)user password:(NSString *)pwd {
  93. NSMutableDictionary *params = [NSMutableDictionary dictionary];
  94. user = [[RASingleton sharedInstance] encryptString:user];
  95. pwd = [[RASingleton sharedInstance] encryptString:pwd];
  96. [params setObject:user forKey:@"name"];
  97. [params setObject:pwd forKey:@"password"];
  98. NSData* json=[self get_json:URL_LOGIN parameters:params file:nil];
  99. return [self handleJsonData:json];
  100. }
  101. + (NSDictionary *)requestRetrievePassword : (NSString*)user email:(NSString*)email
  102. {
  103. // if(![NetworkUtils IsNetworkAvailable])
  104. // return RESULT_NET_NOTAVAILABLE;
  105. NSMutableDictionary * params = [[NSMutableDictionary alloc] init];
  106. [params setValue:user forKey:@"name"];
  107. [params setValue:email forKey:@"email"];
  108. [params setValue:@"Retrieve Password" forKey:@"module_name"];
  109. [params setValue:@"handset_search" forKey:@"action"];
  110. NSData* json=[self get_json:URL_RETRIVE_PASSWORD parameters:params file:nil];
  111. // if (json==nil)
  112. // {
  113. // DebugLog(@"json is wrong");
  114. // return RESULT_NET_ERROR;
  115. // }
  116. //
  117. // NSError *error=nil;
  118. // NSDictionary *jsobj = [NSJSONSerialization JSONObjectWithData:json options:NSJSONReadingMutableLeaves error:&error];
  119. // if(jsobj)
  120. // {
  121. // int result = [[jsobj valueForKey:@"result"] intValue];
  122. // if(result!=AP_USER_AUTH)
  123. // {
  124. // DebugLog(@"USER NOT AUTHORIZED CODE=%d ",result);
  125. // return RESULT_FALSE;
  126. //
  127. // }
  128. // return RESULT_TRUE;
  129. //
  130. // }
  131. // return RESULT_NET_ERROR;
  132. return [self handleJsonData:json];
  133. }
  134. + (NSDictionary *)requestOrderList {
  135. if (RASingleton.sharedInstance.offline) {
  136. NSDictionary *result = [[RAOfflineHandler defaultHandler] requestOfflineHome];
  137. if (result) {
  138. return result;
  139. }
  140. }
  141. NSMutableDictionary *params = [NSMutableDictionary dictionary];
  142. NSData* json=[self get_json:URL_HOME parameters:params file:nil];
  143. return [self handleJsonData:json];
  144. }
  145. + (NSDictionary *)requestMoreOrder:(NSInteger)orderType offset:(NSInteger)offset limit:(NSInteger)limit filter:(NSDictionary *)filter {
  146. NSMutableDictionary *params = [NSMutableDictionary dictionary];
  147. [params setObject:@(orderType) forKey:@"type"];
  148. [params setObject:@(offset) forKey:@"offset"];
  149. [params setObject:@(limit) forKey:@"limit"];
  150. if (filter) {
  151. [params setObject:[self dic2String:filter] forKey:@"filter"];
  152. }
  153. NSData* json=[self get_json:URL_MORE_ORDER parameters:params file:nil];
  154. return [self handleJsonData:json];
  155. }
  156. + (NSDictionary *)requestOrderDetail:(NSString *)orderID type:(NSInteger)type type2:(NSString *)type2 statusNo:(NSString *)statusNo {
  157. if (RASingleton.sharedInstance.offline) {
  158. NSDictionary *result = [[RAOfflineHandler defaultHandler] requestOfflineDetailForOrder:orderID withOrderType:type];
  159. if (result) {
  160. return result;
  161. }
  162. }
  163. NSMutableDictionary *params = [NSMutableDictionary dictionary];
  164. if (orderID) {
  165. [params setObject:orderID forKey:@"orderID"];
  166. }
  167. [params setObject:@(type) forKey:@"orderType"];
  168. if (type2) {
  169. [params setObject:type2 forKey:@"orderType2"];
  170. }
  171. if (statusNo) {
  172. [params setObject:statusNo forKey:@"statusNo"];
  173. }
  174. NSData* json=[self get_json:URL_DETAIL parameters:params file:nil];
  175. NSDictionary *detail = [self handleJsonData:json];
  176. #ifdef OFFLINE_MODE
  177. NSNumber *finish = [[RAOfflineHandler defaultHandler] lastActionIndexForOrder:orderID];
  178. detail = [[RAOfflineHandler defaultHandler] filtrateActionFromDetail:[detail mutableCopy] withFinishActions:finish];
  179. #endif
  180. return detail;
  181. }
  182. + (NSDictionary *)requestUpdateOrder:(NSString *)orderID driverAction:(NSInteger)action index:(NSInteger)idx {
  183. if (RASingleton.sharedInstance.offline) {
  184. NSDictionary *result = [[RAOfflineHandler defaultHandler] requestOfflineEditOrder:orderID withAction:idx];
  185. if (result) {
  186. return result;
  187. }
  188. }
  189. // return [self loadFakeData:@"fake_order_edit.json"];
  190. NSMutableDictionary *params = [NSMutableDictionary dictionary];
  191. if (orderID) {
  192. [params setObject:orderID forKey:@"orderID"];
  193. }
  194. [params setObject:@(action) forKey:@"action"];
  195. NSData* json=[self get_json:URL_UPDATE parameters:params file:nil];
  196. return [self handleJsonData:json];
  197. }
  198. + (NSDictionary *)reportAcionToURL:(NSString *)url withParams:(NSMutableDictionary *)params {
  199. NSData* json=[self get_json:url parameters:params file:nil];
  200. return [self handleJsonData:json];
  201. }
  202. + (NSDictionary *)submitEditOrder:(NSMutableDictionary *)params {
  203. if (![params isKindOfClass:[NSMutableDictionary class]]) {
  204. params = [params mutableCopy];
  205. }
  206. NSData* json=[self get_json:URL_SUBMIT parameters:params file:nil];
  207. return [self handleJsonData:json];
  208. }
  209. + (NSDictionary *)upload:(NSString*)url parameters:(NSMutableDictionary *)params file:(NSString*)file_path {
  210. if (![params isKindOfClass:[NSMutableDictionary class]]) {
  211. params = [params mutableCopy];
  212. }
  213. NSData* json=[self get_json:url parameters:params file:file_path];
  214. return [self handleJsonData:json];
  215. }
  216. + (NSDictionary *)uploadFile:(NSString *)filePath parameters:(NSMutableDictionary *)params {
  217. return [self upload:URL_UPLOAD parameters:params file:filePath];
  218. }
  219. + (NSDictionary *)reportLastLocation:(NSString *)location forOrderID:(NSString *)orderID {
  220. NSMutableDictionary *params = [NSMutableDictionary dictionary];
  221. if (location) {
  222. [params setObject:location forKey:@"location"];
  223. }
  224. if (orderID) {
  225. [params setObject:orderID forKey:@"orderID"];
  226. }
  227. NSString * lastLocationDateTime = RASingleton.sharedInstance.lastLocationDateTime;
  228. if(lastLocationDateTime.length>0)
  229. {
  230. [params setObject:lastLocationDateTime forKey:@"lastLocationDateTime"];
  231. }
  232. [params setObject:@(0) forKey:@"userOption"]; // 0 表示同意发送位置
  233. NSData* json=[self get_json:URL_REPORT_LOCATION parameters:params file:nil];
  234. return [self handleJsonData:json];
  235. }
  236. + (NSDictionary *)reportCurrentLocation:(NSString *)location forOrderID:(NSString *)orderID {
  237. NSMutableDictionary *params = [NSMutableDictionary dictionary];
  238. if (location) {
  239. [params setObject:location forKey:@"location"];
  240. }
  241. if (orderID) {
  242. [params setObject:orderID forKey:@"orderID"];
  243. }
  244. [params setObject:@(0) forKey:@"userOption"]; // 0 表示同意发送位置
  245. NSData* json=[self get_json:URL_REPORT_LOCATION parameters:params file:nil];
  246. return [self handleJsonData:json];
  247. }
  248. + (NSDictionary *)reportLocationWithUserReason:(NSString *)reason forOrder:(NSString *)orderID {
  249. NSMutableDictionary *params = [NSMutableDictionary dictionary];
  250. if (reason) {
  251. [params setObject:reason forKey:@"reason"];
  252. }
  253. if (orderID) {
  254. [params setObject:orderID forKey:@"orderID"];
  255. }
  256. [params setObject:@(1) forKey:@"userOption"]; // 1 表示不同意发送位置
  257. NSData* json=[self get_json:URL_REPORT_LOCATION parameters:params file:nil];
  258. return [self handleJsonData:json];
  259. }
  260. + (NSDictionary *)bindNitificationToken:(NSString *)token {
  261. if (token.length == 0) {
  262. return @{@"result" : @(0)};
  263. }
  264. NSMutableDictionary *params = [NSMutableDictionary dictionary];
  265. [params setObject:token forKey:@"token"];
  266. NSData* json=[self get_json:URL_REPORT_TOKEN parameters:params file:nil];
  267. return [self handleJsonData:json];
  268. }
  269. + (NSDictionary *)logout {
  270. NSMutableDictionary *params = [NSMutableDictionary dictionary];
  271. NSData* json=[self get_json:URL_LOGOUT parameters:params file:nil];
  272. return [self handleJsonData:json];
  273. }
  274. + (NSDictionary *)loadFakeData:(NSString *)fileName {
  275. NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:nil];
  276. NSData *jsonData = [NSData dataWithContentsOfFile:path];
  277. return [self handleJsonData:jsonData];
  278. }
  279. //+ (NSDictionary *)fakeError {
  280. //
  281. //
  282. // return @{
  283. // @"container_photo_0": @"12346798",
  284. // @"container_photo_1": @"78945612",
  285. // @"result": @2
  286. // };
  287. //}
  288. + (NSDictionary *)updateDriverAvailable:(BOOL)available {
  289. NSMutableDictionary *params = [NSMutableDictionary dictionary];
  290. int a = available ? 1 : 0;
  291. [params setObject:@(a) forKey:@"available"];
  292. NSData* json=[self get_json:URL_DRIVER_AVAILABLE parameters:params file:nil];
  293. return [self handleJsonData:json];
  294. }
  295. + (NSDictionary *)loadDataFromBundleFile:(NSString *)fileName {
  296. return [self loadFakeData:fileName];
  297. }
  298. + (NSDictionary *)requestChange:(NSString *)old password:(NSString *)pass {
  299. NSMutableDictionary *params = [NSMutableDictionary dictionary];
  300. if (old) {
  301. [params setObject:old forKey:@"oldPassword"];
  302. }
  303. if (pass) {
  304. [params setObject:pass forKey:@"newPassword"];
  305. }
  306. NSData* json=[self get_json:URL_CHANGE_PASSWORD parameters:params file:nil];
  307. return [self handleJsonData:json];
  308. }
  309. + (NSDictionary *)requestMessage:(NSInteger)offset limit:(NSInteger)limit unread:(BOOL)unread {
  310. NSMutableDictionary *params = [NSMutableDictionary dictionary];
  311. [params setObject:@(offset) forKey:@"offset"];
  312. [params setObject:@(limit) forKey:@"limit"];
  313. [params setObject:@(unread) forKey:@"unread"];
  314. NSData* json=[self get_json:URL_MESSAGE_LIST parameters:params file:nil];
  315. return [self handleJsonData:json];
  316. }
  317. #pragma mark - Utils
  318. + (NSString *)dic2String:(NSDictionary *)dic {
  319. if (!dic) {
  320. return nil;
  321. }
  322. NSData *data = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:nil];
  323. NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
  324. return str;
  325. }
  326. @end