RQCommonManager.m 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. //
  2. // RQCommonManager.m
  3. // SDJK
  4. //
  5. // Created by 张嵘 on 2021/8/19.
  6. //
  7. #import "RQCommonManager.h"
  8. static NSString * const RQQuestionCarTypeKey = @"RQQuestionCarTypeKey";
  9. @interface RQCommonManager () <UIDocumentPickerDelegate>
  10. @end
  11. @implementation RQCommonManager
  12. @def_singleton(RQCommonManager);
  13. - (void)saveObjectWithObject:(id)object ForKey:(NSString* )key {
  14. NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
  15. if (!object) {
  16. [ud removeObjectForKey:key];
  17. }else{
  18. [ud setObject:object forKey:key];
  19. }
  20. [ud synchronize];
  21. }
  22. - (id)getObjectWithKey:(NSString *)key {
  23. NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
  24. return [ud objectForKey:key];
  25. }
  26. - (void)setCarType:(RQHomePageCarType)carType {
  27. NSString *carTypeStr = [NSString stringWithFormat:@"%@",[NSNumber numberWithInteger:carType]];
  28. [[NSUserDefaults standardUserDefaults] setObject:carTypeStr forKey:RQQuestionCarTypeKey];
  29. [[NSUserDefaults standardUserDefaults] synchronize];
  30. }
  31. - (RQHomePageCarType)carType {
  32. NSString *carTypeStr = [[NSUserDefaults standardUserDefaults] objectForKey:RQQuestionCarTypeKey];
  33. carTypeStr = [carTypeStr rq_stringValueExtension];
  34. return carTypeStr.integerValue;
  35. }
  36. - (void)setHistoryEmailStr:(NSString *)historyEmailStr {
  37. NSString *key = [NSString stringWithFormat:@"RQHistoryEmailStrKey-%@",RQ_USER_MANAGER.currentUserId];
  38. [[NSUserDefaults standardUserDefaults] setObject:historyEmailStr forKey:key];
  39. [[NSUserDefaults standardUserDefaults] synchronize];
  40. }
  41. - (NSString *)historyEmailStr {
  42. NSString *key = [NSString stringWithFormat:@"RQHistoryEmailStrKey-%@",RQ_USER_MANAGER.currentUserId];
  43. NSString *historyEmailStr = [[NSUserDefaults standardUserDefaults] objectForKey:key];
  44. historyEmailStr = [historyEmailStr rq_stringValueExtension];
  45. return historyEmailStr;
  46. }
  47. - (NSString *)carTypeStr {
  48. return [self getCarTypeStrWithCarType:self.carType];
  49. }
  50. - (NSString *)subjectStr {
  51. return [self getSubjectTypeStrWithSubjectType:self.subject];
  52. }
  53. - (NSString *)getCarTypeStrWithCarType:(RQHomePageCarType)carType {
  54. switch (carType) {
  55. case RQHomePageCarType_Car:
  56. return @"小车";
  57. case RQHomePageCarType_Bus:
  58. return @"客车";
  59. case RQHomePageCarType_Truck:
  60. return @"货车";
  61. case RQHomePageCarType_Motorcycle:
  62. return @"摩托车";
  63. default:
  64. return @"";
  65. }
  66. }
  67. - (NSString *)getCarTypeEnStrWithCarType:(RQHomePageCarType)carType {
  68. switch (carType) {
  69. case RQHomePageCarType_Car:
  70. return @"liceCar";
  71. case RQHomePageCarType_Bus:
  72. return @"liceBus";
  73. case RQHomePageCarType_Truck:
  74. return @"liceTruck";
  75. case RQHomePageCarType_Motorcycle:
  76. return @"liceMoto";
  77. default:
  78. return @"liceCar";
  79. }
  80. }
  81. - (NSString *)getCarTypeSimpleCNStrWithCarType:(RQHomePageCarType)carType {
  82. switch (carType) {
  83. case RQHomePageCarType_Car:
  84. return @"xc";
  85. case RQHomePageCarType_Bus:
  86. return @"kc";
  87. case RQHomePageCarType_Truck:
  88. return @"hc";
  89. case RQHomePageCarType_Motorcycle:
  90. return @"mtc";
  91. default:
  92. return @"xc";
  93. }
  94. }
  95. - (NSString *)getCarTypeSimpleCNStrWithCarTypeNew:(RQHomePageCarType)carType {
  96. switch (carType) {
  97. case RQHomePageCarType_Car:
  98. return @"cart";
  99. case RQHomePageCarType_Bus:
  100. return @"bus";
  101. case RQHomePageCarType_Truck:
  102. return @"truck";
  103. case RQHomePageCarType_Motorcycle:
  104. return @"mtc";
  105. default:
  106. return @"xc";
  107. }
  108. }
  109. - (NSString *)getSubjectTypeStrWithSubjectType:(RQHomePageSubjectType)subjecType {
  110. if (subjecType == RQHomePageSubjectType_SubjectOne) {
  111. return @"科目一";
  112. } else if (subjecType == RQHomePageSubjectType_SubjectFour) {
  113. return @"科目四";
  114. } else {
  115. return @"科目一";
  116. }
  117. }
  118. - (NSString *)getSubjectTypeNumStrWithSubjectType:(RQHomePageSubjectType)subjecType {
  119. if (subjecType == RQHomePageSubjectType_SubjectOne) {
  120. return @"1";
  121. } else if (subjecType == RQHomePageSubjectType_SubjectFour) {
  122. return @"4";
  123. } else {
  124. return @"1";
  125. }
  126. }
  127. - (NSString *)getMiExamTypeNumStrWithMiExamType:(RQMiExamType)miExamType {
  128. if (miExamType == RQMiExamType_One) {
  129. return @"3";
  130. } else if (miExamType == RQMiExamType_Two) {
  131. return @"4";
  132. } else {
  133. return @"3";
  134. }
  135. }
  136. //- (void)checkVersionWithComplete:(VoidBlock_Bool)complete {
  137. // /// 1: open 2: close
  138. // [[RQ_HTTP_Service getConfigKeyWithPath:RQButtonSwitchOriginalPath] subscribeNext:^(NSString *isOpenStr) {
  139. // if ([isOpenStr isEqualToString:@"1"]) {
  140. // if (RQ_USER_MANAGER.isLogin) {
  141. // complete(RQ_USER_MANAGER.currentUser.appleUserInfo);
  142. // } else {
  143. // complete(YES);
  144. // }
  145. // } else {
  146. // complete(NO);
  147. // }
  148. // } error:^(NSError * _Nullable error) {
  149. // complete(NO);
  150. // }];
  151. //}
  152. - (void)checkVersionWithComplete:(VoidBlock_Bool)complete {
  153. NSInteger localVersion = [[RQ_APP_VERSION stringByReplacingOccurrencesOfString:@"." withString:@""] integerValue];
  154. [[RQ_HTTP_Service getConfigKeyWithPath:RQOnlineVersionPath] subscribeNext:^(NSString *customOnlineVersionStr) {
  155. NSInteger customOnlineVersion = [[customOnlineVersionStr stringByReplacingOccurrencesOfString:@"." withString:@""] integerValue];
  156. /// 本地版本大于等于内部版本(审核的时候内部版本一定大于等于本地版本)
  157. if (localVersion >= customOnlineVersion) {
  158. complete(YES);
  159. } else {
  160. complete(NO);
  161. }
  162. } error:^(NSError * _Nullable error) {
  163. [self getAppStoreVersionWithComplete:^(NSInteger onlineVersion) {
  164. if (onlineVersion != 0) {
  165. /// 本地版本大于线上版本(审核的时候本地版本一定大于线上版本)
  166. if (localVersion > onlineVersion) {
  167. complete(YES);
  168. } else {
  169. complete(NO);
  170. }
  171. } else {
  172. complete(NO);
  173. }
  174. }];
  175. }];
  176. }
  177. - (void)getAppStoreVersionWithComplete:(VoidBlock_integer)complete {
  178. NSString *URL = @"http://itunes.apple.com/cn/lookup?id=1586064774";
  179. NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:URL] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
  180. [request setHTTPMethod:@"POST"];
  181. NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
  182. dispatch_async_on_main_queue(^{
  183. //这个导致部分手机网络不好时候出现闪退情况
  184. if (!data) {
  185. complete(0);
  186. return;
  187. }
  188. //如果data等于nil的时候 再去解析 会发生崩溃
  189. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
  190. if (!dic) {
  191. complete(0);
  192. return;
  193. }
  194. NSArray *infoArray = [dic objectForKey:@"results"];
  195. if ([infoArray count]) {
  196. NSDictionary *releaseInfo = [infoArray objectAtIndex:0];
  197. NSString *netVersion = [releaseInfo objectForKey:@"version"];
  198. // 线上版本号
  199. NSInteger netInt = [[netVersion stringByReplacingOccurrencesOfString:@"." withString:@""] integerValue];
  200. complete(netInt);
  201. } else {
  202. complete(0);
  203. }
  204. });
  205. }];
  206. [task resume];
  207. }
  208. - (void)checkAppStoreVersionWithComplete:(VoidBlock_Bool)complete {
  209. NSString *URL = @"http://itunes.apple.com/cn/lookup?id=1586064774";
  210. NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:URL] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
  211. [request setHTTPMethod:@"POST"];
  212. NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
  213. dispatch_async_on_main_queue(^{
  214. //这个导致部分手机网络不好时候出现闪退情况
  215. if (!data) {
  216. complete(NO);
  217. return;
  218. }
  219. //如果data等于nil的时候 再去解析 会发生崩溃
  220. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
  221. if (!dic) {
  222. complete(NO);
  223. return;
  224. }
  225. NSArray *infoArray = [dic objectForKey:@"results"];
  226. if ([infoArray count]) {
  227. NSDictionary *releaseInfo = [infoArray objectAtIndex:0];
  228. NSString *netVersion = [releaseInfo objectForKey:@"version"];
  229. //NSLog(@"AppStore-->%@,手机上-->%@",lastVersion,currentVersion);
  230. // 线上版本号
  231. NSInteger netInt = [[netVersion stringByReplacingOccurrencesOfString:@"." withString:@""] integerValue];
  232. // 本地版本号
  233. NSInteger localInt = [[RQ_APP_VERSION stringByReplacingOccurrencesOfString:@"." withString:@""] integerValue];
  234. if (netInt > localInt) {
  235. NSLog(@"更新");
  236. complete(YES);
  237. }else{
  238. //已是最新版
  239. NSLog(@"不更");
  240. complete(NO);
  241. }
  242. } else {
  243. [MBProgressHUD rq_showTips:@"暂无新版本信息"];
  244. complete(NO);
  245. }
  246. });
  247. }];
  248. [task resume];
  249. }
  250. #pragma mark - 下载文件
  251. /// http://jadinec-test.oss-accelerate.aliyuncs.com/excelFile/a5f23e130d5e4dd7adda942c45207927.pdf
  252. - (void)downLoadWithFilePath:(NSString *)filePath {
  253. float version = [[[UIDevice currentDevice] systemVersion] floatValue];
  254. if (version >= 11) {
  255. } else {
  256. [MBProgressHUD rq_showTips:@"下载文件要求手机系统版本在11.0以上"];
  257. return;
  258. }
  259. /**
  260. /// 保存网络文件到沙盒一
  261. NSURLRequest *req = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:filePath]];
  262. NSData *fileData = [NSURLConnection sendSynchronousRequest:req returningResponse:nil error:nil];
  263. NSString *temp = NSTemporaryDirectory();
  264. NSFileManager *fm = [NSFileManager defaultManager];
  265. NSString *fullPath = [self getNativeFilePath:[filePath componentsSeparatedByString:@"/"].lastObject];
  266. BOOL downResult = [fm createFileAtPath:fullPath contents:fileData attributes:nil];
  267. */
  268. /// 保存网络文件到沙盒二
  269. NSData *fileData = [NSData dataWithContentsOfURL:[NSURL URLWithString:filePath]];
  270. // NSString *fullPath = [self getNativeFilePath:[filePath componentsSeparatedByString:@"/"].lastObject];
  271. NSString *fullPath = [self getNativeFilePath:[[filePath componentsSeparatedByString:@"/"].lastObject rq_URLDecoding]];
  272. BOOL downResult = [fileData writeToFile:fullPath atomically:YES];
  273. if (downResult) {
  274. UIDocumentPickerViewController *documentPickerVC = [[UIDocumentPickerViewController alloc] initWithURL:[NSURL fileURLWithPath:fullPath] inMode:UIDocumentPickerModeExportToService];
  275. // 设置代理
  276. documentPickerVC.delegate = self;
  277. // 设置模态弹出方式
  278. documentPickerVC.modalPresentationStyle = UIModalPresentationFormSheet;
  279. [RQ_APPDELEGATE.navigationControllerStack.topNavigationController presentViewController:documentPickerVC animated:YES completion:nil];
  280. }
  281. }
  282. // 获得文件沙盒地址
  283. - (NSString *)getNativeFilePath:(NSString *)fileName {
  284. NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
  285. NSString *munu = [NSString stringWithFormat:@"%@/%@",@"downLoad",fileName];
  286. NSString *filePath = [path stringByAppendingPathComponent:munu];
  287. // 判断是否存在,不存在则创建
  288. NSFileManager *fileManager = [NSFileManager defaultManager];
  289. // fileExistsAtPath 判断一个文件或目录是否有效,isDirectory判断是否一个目录
  290. BOOL isDir = NO;
  291. NSMutableArray *theArr = [[filePath componentsSeparatedByString:@"/"] mutableCopy];
  292. [theArr removeLastObject];
  293. NSString *thePath = [theArr componentsJoinedByString:@"/"];
  294. BOOL existed = [fileManager fileExistsAtPath:thePath isDirectory:&isDir];
  295. if ( !(isDir == YES && existed == YES) ) { // 如果文件夹不存在
  296. [fileManager createDirectoryAtPath:thePath withIntermediateDirectories:YES attributes:nil error:nil];
  297. }
  298. return filePath;
  299. }
  300. #pragma mark - UIDocumentPickerDelegate
  301. - (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray<NSURL *> *)urls {
  302. // 获取授权
  303. BOOL fileUrlAuthozied = [urls.firstObject startAccessingSecurityScopedResource];
  304. if (fileUrlAuthozied) {
  305. // 通过文件协调工具来得到新的文件地址,以此得到文件保护功能
  306. NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] init];
  307. NSError *error;
  308. [fileCoordinator coordinateReadingItemAtURL:urls.firstObject options:0 error:&error byAccessor:^(NSURL *newURL) {
  309. // 读取文件
  310. NSString *fileName = [newURL lastPathComponent];
  311. NSError *error = nil;
  312. //NSData *fileData = [NSData dataWithContentsOfURL:newURL options:NSDataReadingMappedIfSafe error:&error];
  313. if (error) {
  314. // 读取出错
  315. } else {
  316. // 上传
  317. NSLog(@"fileName : %@", fileName);
  318. }
  319. }];
  320. [urls.firstObject stopAccessingSecurityScopedResource];
  321. } else {
  322. // 授权失败
  323. }
  324. }
  325. - (BOOL)SDJK_APP_ICON_NEED_CHANGE {
  326. id object = [self getObjectWithKey:@"SDJK_APP_ICON_NEED_CHANGE"];
  327. if (RQObjectIsNil(object)) {
  328. return NO;
  329. } else {
  330. BOOL SDJK_APP_ICON_NEED_CHANGE = [object boolValue];
  331. return SDJK_APP_ICON_NEED_CHANGE;
  332. }
  333. }
  334. - (void)setSDJK_APP_ICON_NEED_CHANGE:(BOOL)SDJK_APP_ICON_NEED_CHANGE {
  335. [self saveObjectWithObject:[NSNumber numberWithInteger:SDJK_APP_ICON_NEED_CHANGE] ForKey:@"SDJK_APP_ICON_NEED_CHANGE"];
  336. }
  337. @end