AppDelegate+SPSBHandleData.m 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  1. //
  2. // AppDelegate+SPSBHandleData.m
  3. // 我的社保
  4. //
  5. // Created by shanp on 2021/4/21.
  6. //
  7. #import "AppDelegate+SPSBHandleData.h"
  8. #import "SPSBBusinessManager.h"
  9. #import "SPSBGeneralManager.h"
  10. #import <JXHSystemShortcut.h>
  11. #import "SPSBKeyProfile.h"
  12. #import "SPSBSQLProfile.h"
  13. #import <JXHGeneralTools.h>
  14. #import "SPSBNetworkManager.h"
  15. #import "SPSBURLApiProfile.h"
  16. #import "SPSBBaseNetworkModel.h"
  17. #import "SPSBOpenADManager.h"
  18. #import "SPSBInfoSteamADManager.h"
  19. #import "SPSBNotificationDelegateManager.h"
  20. #import "SPSBAppDifferenceProfile.h"
  21. #import "SPSBADSwitchModel.h"
  22. #import "SPSBAppProfileModel.h"
  23. #import "SPSBConstantProfile.h"
  24. #import "SPSBOpenPopupManager.h"
  25. #import "SPSBConfirmAlertViewController.h"
  26. #import "AppDelegate+SPSBPopup.h"
  27. #import <objc/runtime.h>
  28. #import <JXHFMDBManager.h>
  29. #import "AppDelegate+SPSBAutoLogin.h"
  30. #import "SPSBUIGeneralHeader.h"
  31. @implementation AppDelegate (SPSBHandleData)
  32. - (void)createSQL {
  33. NSString *orginaPath;
  34. NSString *targetPath;
  35. NSFileManager *fileManager = [NSFileManager defaultManager];;
  36. NSArray *tableNameArray = @[@"shanp_social_insurance", @"shanp_social_insurance_location", @"t_query_city", @"t_transfer_city", @"t_social_Insurance_city", @"t_wait_to_do_data"];
  37. for (NSInteger i = 0; i < tableNameArray.count; i ++) {
  38. orginaPath = [[NSBundle mainBundle] pathForResource:tableNameArray[i] ofType:@"db"];
  39. targetPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.db", tableNameArray[i]]];
  40. if ([fileManager fileExistsAtPath:targetPath] == NO)
  41. {
  42. NSError *error;
  43. [fileManager copyItemAtPath:orginaPath toPath:targetPath error:&error];
  44. }
  45. }
  46. }
  47. - (void)handleCache {
  48. NSString *city = [jxh_userDefaults() objectForKey:SPSBCheckPublicDataCity];
  49. if (city != nil) {
  50. spsb_setLastCheckPublicDataCity(city);
  51. }
  52. }
  53. #pragma mark - 版本容错
  54. static const NSInteger SPSBDeleteIdcareVersion = 17;
  55. static const NSInteger SPSBChangeQueryCityVersion = 20;//同时删除了购买人缓存
  56. static const NSInteger SPSBDeleteBadBannerVersion = 24;//删除旧版质量差的图片
  57. static const NSInteger SPSBChangeQueryCityDataVersion = 27;//替换查询城市数据
  58. - (void)versionCompatibility {
  59. if ([[jxh_userDefaults() objectForKey:SPSBAppInsideVersion] integerValue] <= 0) return;
  60. if ([[jxh_userDefaults() objectForKey:SPSBAppInsideVersion] integerValue] <= SPSBDeleteIdcareVersion) {
  61. [JXHFMDBManager updateWithPath:SPSBShanpSocialInsuranceLocationSQL condition:^id(FMDatabase *database) {
  62. bool result1 = [database executeUpdate:@"delete from id_card"];
  63. bool result2 = [database executeUpdate:@"delete from cache_data where key not in(?)", SPSBqueryCitySQLKey];
  64. if (!result1 || !result2) {
  65. return @NO;
  66. }
  67. return @YES;
  68. }];
  69. }
  70. if ([[jxh_userDefaults() objectForKey:SPSBAppInsideVersion] integerValue] <= SPSBChangeQueryCityVersion) {
  71. NSFileManager *fileManager = [NSFileManager defaultManager];;
  72. NSString *targetPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"t_query_city.db"];
  73. if ([fileManager fileExistsAtPath:targetPath] == YES) {
  74. [fileManager removeItemAtPath:targetPath error:nil];
  75. }
  76. [JXHFMDBManager updateWithPath:SPSBShanpSocialInsuranceLocationSQL condition:^id(FMDatabase *database) {
  77. return @([database executeUpdate:@"delete from cache_data where key = ?", SPSBCachePurchasersSQLKey]);
  78. }];
  79. [jxh_userDefaults() removeObjectForKey:SPSBQueryCityRefreshTime];
  80. [jxh_userDefaults() synchronize];
  81. }
  82. //删除旧版质量差的图片
  83. if ([[jxh_userDefaults() objectForKey:SPSBAppInsideVersion] integerValue] < SPSBDeleteBadBannerVersion) {
  84. jxh_deleteDirInCache(SPSBBarImageList);
  85. jxh_createDirInCache(SPSBBarImageList);
  86. }
  87. //替换查询城市数据
  88. if ([[jxh_userDefaults() objectForKey:SPSBAppInsideVersion] integerValue] <= SPSBChangeQueryCityDataVersion) {
  89. NSFileManager *fileManager = [NSFileManager defaultManager];;
  90. NSString *targetPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"t_query_city.db"];
  91. if ([fileManager fileExistsAtPath:targetPath] == YES) {
  92. [fileManager removeItemAtPath:targetPath error:nil];
  93. }
  94. [JXHFMDBManager updateWithPath:SPSBShanpSocialInsuranceLocationSQL condition:^id(FMDatabase *database) {
  95. return @([database executeUpdate:@"delete from cache_data where key = ?", SPSBqueryCitySQLKey]);
  96. }];
  97. [jxh_userDefaults() removeObjectForKey:SPSBQueryCityRefreshTime];
  98. [jxh_userDefaults() synchronize];
  99. }
  100. }
  101. - (void)getADSwitch {
  102. [spsb_globalNetworkManager() networkUseMethod:SPSBNetworkMethodGET isLogin:false url:spsb_wwwUrl(SPSBUrlADSwitch) urlParameters:nil parameters:nil completion:^(NSError * _Nonnull error, id _Nullable data) {
  103. if (error.code == SPSBNetworkErrorCodeSuccess) {
  104. SPSBADSwitchModel *model = [SPSBADSwitchModel getModelWithDictionary:data[@"data"]];
  105. spsb_openADManager().spsb_switchStatus = model.spsb_ad_onopen.integerValue;
  106. spsb_infoSteamAdManager().spsb_isShowSteamInfo = model.spsb_ad_news.boolValue;
  107. spsb_postNotification(SPSBOpenAdNotificationKey, @selector(spsb_gotOpenAdData), spsb_gotOpenAdData);
  108. }
  109. spsb_postNotification(SPSBAppStatusNotificationKey, @selector(spsb_gotStreamInfoSwitch), spsb_gotStreamInfoSwitch);
  110. }];
  111. }
  112. - (void)getProfile {
  113. @weakify(self)
  114. [spsb_globalNetworkManager() networkUseMethod:SPSBNetworkMethodGET isLogin:false url:spsb_wwwUrl(SPSBUrlGetVersion) urlParameters:nil parameters:@{@"appname": SPSBAppNameForOpen} completion:^(NSError * _Nonnull error, id _Nullable data) {
  115. if (nil == data[@"data"] || error.code != SPSBNetworkErrorCodeSuccess) return;
  116. @strongify(self)
  117. SPSBAppProfileModel *model = [SPSBAppProfileModel getModelWithDictionary:data[@"data"]];
  118. if (model.spsb_v.spsb_force.boolValue && model.spsb_v.spsb_force_version.integerValue > SPSBCurrentVersion) {
  119. SPSBConfirmAlertViewController *vc = [SPSBConfirmAlertViewController alertWithTitle:@"有新版本更新" content:model.spsb_v.spsb_desc];
  120. @weakify(self)
  121. [vc setCancelButtonTitle:@"关闭应用" titleColor:nil action:^{
  122. @strongify(self)
  123. [self exitApplication];
  124. }];
  125. [vc setConfirmButtonTitle:@"马上更新" titleColor:nil action:^{
  126. @strongify(self)
  127. jxh_openUrl([NSURL URLWithString:SPSBUrlToAppStore], ^(BOOL success) {
  128. [self exitApplication];
  129. });
  130. }];
  131. SPSBOpenPopupModel *m = SPSBOpenPopupModel.new;
  132. m.spsb_popup = vc;
  133. m.spsb_stopPopup = true;
  134. [SPSBOpenPopupManager insertPopupAtFirst:m];
  135. return;
  136. }
  137. if (model.spsb_v.spsb_version.integerValue > SPSBCurrentVersion) {
  138. SPSBConfirmAlertViewController *vc = [SPSBConfirmAlertViewController alertWithTitle:@"有新版本更新" content:model.spsb_v.spsb_desc];
  139. [vc setCancelButtonTitle:@"暂不更新" titleColor:nil action:^{
  140. }];
  141. [vc setConfirmButtonTitle:@"马上更新" titleColor:nil action:^{
  142. jxh_openUrl([NSURL URLWithString:SPSBUrlToAppStore], ^(BOOL success) {
  143. });
  144. }];
  145. SPSBOpenPopupModel *m = SPSBOpenPopupModel.new;
  146. m.spsb_popup = vc;
  147. [SPSBOpenPopupManager insertPopup:m];
  148. }
  149. if (model.spsb_pop_img.spsb_img.length > 0) {
  150. [self judgeAdPopup:model.spsb_pop_img];
  151. }
  152. if (model.spsb_tel.length > 0) {
  153. [jxh_userDefaults() setObject:model.spsb_tel forKey:SPSBCustomerServicePhone];
  154. [jxh_userDefaults() synchronize];
  155. }
  156. spsb_setHomeViewButtons(model.spsb_entranceFlag);
  157. spsb_postNotification(SPSBAppStatusNotificationKey, @selector(spsb_appNeedRefreshHomeViewButtons), spsb_appNeedRefreshHomeViewButtons);
  158. spsb_postNotification(SPSBAppStatusNotificationKey, @selector(spsb_appNeedRefreshBannerImages:actions:), spsb_appNeedRefreshBannerImages:model.spsb_barList actions:model.spsb_uriList);
  159. spsb_setAdsArray(model.spsb_ads);
  160. spsb_postNotification(SPSBAppStatusNotificationKey, @selector(spsb_appNeedRefreshHomeViewAds), spsb_appNeedRefreshHomeViewAds);
  161. spsb_setPolicyArray(model.spsb_index_policy);
  162. spsb_postNotification(SPSBAppStatusNotificationKey, @selector(spsb_appNeedRefreshHomeViewPolicy), spsb_appNeedRefreshHomeViewPolicy);
  163. if (![jxh_userDefaults() objectForKey:SPSBCityRefreshTime] || [[jxh_userDefaults() objectForKey:SPSBCityRefreshTime] integerValue] != model.spsb_city.integerValue) {
  164. self.tempCityRefreshTime = model.spsb_city;
  165. [self getCityList];
  166. }
  167. if (![jxh_userDefaults() objectForKey:SPSBQueryCityRefreshTime] || [[jxh_userDefaults() objectForKey:SPSBQueryCityRefreshTime] integerValue] != model.spsb_query.integerValue) {
  168. self.tempQueryCityRefreshTime = model.spsb_query;
  169. [self getQueryCityList];
  170. }
  171. if (![jxh_userDefaults() objectForKey:SPSBTransferCityRefreshTime] || [[jxh_userDefaults() objectForKey:SPSBTransferCityRefreshTime] integerValue] != model.spsb_move_city.integerValue) {
  172. self.tempTransferCityRefreshTime = model.spsb_move_city;
  173. [self getTransferCityList];
  174. }
  175. if (model.spsb_wxpay_limit.length > 0) {
  176. spsb_setWxpayLimit(model.spsb_wxpay_limit.integerValue);
  177. }
  178. }];
  179. }
  180. #pragma mark - 获取城市列表
  181. - (void)getCityList {
  182. @weakify(self)
  183. [spsb_globalNetworkManager() networkUseMethod:SPSBNetworkMethodGET isLogin:false url:spsb_appUrl(SPSBUrlGetCityList) urlParameters:nil parameters:nil completion:^(NSError * _Nonnull error, id _Nullable data) {
  184. if (error.code == SPSBNetworkErrorCodeSuccess && [data[@"data"] isKindOfClass:[NSArray class]]) {
  185. @strongify(self)
  186. [self handleCityWithArray:data[@"data"]];
  187. }
  188. }];
  189. }
  190. - (void)handleCityWithArray:(NSArray *)array {
  191. dispatch_async(dispatch_get_global_queue(0, 0), ^{
  192. NSString *sqlStr = [self appendSqlStrWithArray:array];
  193. dispatch_async(dispatch_get_main_queue(), ^{
  194. [JXHFMDBManager updateWithPath:SPSBShanpSocialInsuranceSQL condition:^id(FMDatabase *database) {
  195. return @([database executeUpdate:@"delete from t_sp_city"]);
  196. }];
  197. [JXHFMDBManager updateWithPath:SPSBShanpSocialInsuranceSQL condition:^id(FMDatabase *database) {
  198. return @([database executeUpdate:sqlStr]);
  199. }];
  200. [jxh_userDefaults() setObject:self.tempCityRefreshTime forKey:SPSBCityRefreshTime];
  201. [jxh_userDefaults() synchronize];
  202. });
  203. });
  204. }
  205. - (NSString *)appendSqlStrWithArray:(NSArray *)array {
  206. NSMutableString *sqlStr = [NSMutableString stringWithString:@"insert into t_sp_city (id, parent_id, name, is_city) values"];
  207. for (NSInteger i = 0; i < array.count; i ++) {
  208. [sqlStr appendFormat:@"('%@', '%@', '%@', '%@'),", array[i][@"id"], array[i][@"pid"], array[i][@"name"], array[i][@"isCity"]];
  209. if (i == array.count - 1) {
  210. [sqlStr replaceCharactersInRange:NSMakeRange(sqlStr.length - 1, 1) withString:@""];
  211. }
  212. }
  213. return sqlStr;
  214. }
  215. #pragma mark - 获取查询城市列表
  216. - (void)getQueryCityList {
  217. @weakify(self)
  218. [spsb_globalNetworkManager() networkUseMethod:SPSBNetworkMethodGET isLogin:false url:spsb_appUrl(SPSBUrlGetQueryCityList) urlParameters:nil parameters:nil completion:^(NSError * _Nonnull error, id _Nullable data) {
  219. if (error.code == SPSBNetworkErrorCodeSuccess && [data[@"data"] isKindOfClass:[NSArray class]]) {
  220. @strongify(self)
  221. [self handleQueryCityWithArray:data[@"data"]];
  222. }
  223. }];
  224. }
  225. - (void)handleQueryCityWithArray:(NSArray *)array {
  226. dispatch_async(dispatch_get_global_queue(0, 0), ^{
  227. NSMutableString *sqlStr = [NSMutableString stringWithString:@"insert into t_sp_query_city (cid, city_name, shebao_url, shebao_wx, shebao_tel, fund_url, fund_wx, fund_tel, pinyin, pinyin_abbreviation) values"];
  228. NSMutableArray *keyArray = [@[@"热"] mutableCopy];
  229. NSMutableArray<NSMutableDictionary *> *idArray = [@[@{@"热" : [@[] mutableCopy]}] mutableCopy];
  230. NSMutableArray<NSMutableDictionary *> *dataArray = [@[@{@"热" : [@[] mutableCopy]}] mutableCopy];
  231. NSMutableDictionary<NSString *, NSMutableArray *> *data = [@{} mutableCopy];
  232. NSMutableDictionary<NSString *, NSMutableArray *> *idData = [@{} mutableCopy];
  233. for (NSInteger i = 0; i < array.count; i ++) {
  234. SPSBBaseNetworkModel *baseModel = SPSBBaseNetworkModel.new;
  235. NSString *name = [baseModel getStringDataWithDictionary:array[i] variable:@"city_name"];
  236. NSString *cid = [baseModel getStringDataWithDictionary:array[i] variable:@"cid"];
  237. if (name.length == 0 || cid.length == 0) {
  238. continue;
  239. }
  240. NSMutableString *namePinyin = [name mutableCopy];
  241. CFStringTransform((__bridge CFMutableStringRef)namePinyin, 0, kCFStringTransformMandarinLatin, NO);
  242. CFStringTransform((__bridge CFMutableStringRef)namePinyin, 0, kCFStringTransformStripDiacritics, NO);
  243. NSString *key = [[namePinyin substringWithRange:NSMakeRange(0, 1)] uppercaseString];
  244. if (!data[key]) {
  245. data[key] = [@[] mutableCopy];
  246. idData[key] = [@[] mutableCopy];
  247. }
  248. [data[key] addObject:name];
  249. [idData[key] addObject:cid];
  250. if (array[i][@"hot"] && [array[i][@"hot"] boolValue]) {
  251. [dataArray[0][@"热"] addObject:name];
  252. [idArray[0][@"热"] addObject:cid];
  253. }
  254. //
  255. NSArray *pinyinArray = [namePinyin componentsSeparatedByString:@" "];
  256. NSMutableString *pinyinAbbreviation = [@"" mutableCopy];
  257. for (NSInteger i = 0; i < pinyinArray.count; i ++) {
  258. [pinyinAbbreviation appendString:[pinyinArray[i] substringWithRange:NSMakeRange(0, 1)]];
  259. }
  260. [sqlStr appendFormat:@"('%@', '%@', '%@', '%@', '%@', '%@', '%@', '%@', '%@', '%@'),",
  261. cid,
  262. name,
  263. [baseModel getStringDataWithDictionary:array[i] variable:@"shebao_site"],
  264. [baseModel getStringDataWithDictionary:array[i] variable:@"shebao_wx"],
  265. [baseModel getStringDataWithDictionary:array[i] variable:@"shebao_tel"],
  266. [baseModel getStringDataWithDictionary:array[i] variable:@"fund_site"],
  267. [baseModel getStringDataWithDictionary:array[i] variable:@"fund_wx"],
  268. [baseModel getStringDataWithDictionary:array[i] variable:@"fund_tel"],
  269. [namePinyin stringByReplacingOccurrencesOfString:@" " withString:@""],
  270. pinyinAbbreviation];
  271. }
  272. [sqlStr replaceCharactersInRange:NSMakeRange(sqlStr.length - 1, 1) withString:@""];
  273. for (int i = 0; i < 26; i ++) {
  274. NSString *str = [NSString stringWithFormat:@"%c",65 + i];
  275. if (data[str]) {
  276. [keyArray addObject:str];
  277. [dataArray addObject:[@{str : data[str]} mutableCopy]];
  278. [idArray addObject:[@{str: idData[str]} mutableCopy]];
  279. }
  280. }
  281. dispatch_async(dispatch_get_main_queue(), ^{
  282. [JXHFMDBManager updateWithPath:SPSBShanpSocialInsuranceLocationSQL condition:^id(FMDatabase *database) {
  283. return @([database executeUpdate:@"delete from cache_data where key = ?", SPSBqueryCitySQLKey]);
  284. }];
  285. NSData *archiverData = jxh_archiver(@{@"data" : dataArray, @"key" : keyArray, @"id": idArray}, SPSBqueryCitySQLKey);
  286. [JXHFMDBManager updateWithPath:SPSBShanpSocialInsuranceLocationSQL condition:^id(FMDatabase *database) {
  287. return @([database executeUpdate:@"insert into cache_data (key, data) values (?, ?)", SPSBqueryCitySQLKey, archiverData]);
  288. }];
  289. [JXHFMDBManager updateWithPath:SPSBShanpQueryCitySQL condition:^id(FMDatabase *database) {
  290. return @([database executeUpdate:@"delete from t_sp_query_city"]);
  291. }];
  292. [JXHFMDBManager updateWithPath:SPSBShanpQueryCitySQL condition:^id(FMDatabase *database) {
  293. return @([database executeUpdate:sqlStr]);
  294. }];
  295. [jxh_userDefaults() setObject:self.tempQueryCityRefreshTime forKey:SPSBQueryCityRefreshTime];
  296. [jxh_userDefaults() synchronize];
  297. });
  298. });
  299. }
  300. #pragma mark - 获取转移城市列表
  301. - (void)getTransferCityList {
  302. @weakify(self)
  303. [spsb_globalNetworkManager() networkUseMethod:SPSBNetworkMethodPOST isLogin:false url:spsb_appUrl(SPSBUrlGetTransferCity) urlParameters:nil parameters:nil completion:^(NSError * _Nonnull error, id _Nullable data) {
  304. if (error.code == SPSBNetworkErrorCodeSuccess && [data[@"data"] isKindOfClass:[NSArray class]]) {
  305. @strongify(self)
  306. [self handleTransferCityWithArray:data[@"data"]];
  307. }
  308. }];
  309. }
  310. - (void)handleTransferCityWithArray:(NSArray *)array {
  311. dispatch_async(dispatch_get_global_queue(0, 0), ^{
  312. NSString *sqlStr = [self appendSqlStrWithArray:array];
  313. dispatch_async(dispatch_get_main_queue(), ^{
  314. [JXHFMDBManager updateWithPath:SPSBShanpTransferCitySQL condition:^id(FMDatabase *database) {
  315. return @([database executeUpdate:@"delete from t_sp_city"]);
  316. }];
  317. [JXHFMDBManager updateWithPath:SPSBShanpTransferCitySQL condition:^id(FMDatabase *database) {
  318. return @([database executeUpdate:sqlStr]);
  319. }];
  320. [jxh_userDefaults() setObject:self.tempTransferCityRefreshTime forKey:SPSBTransferCityRefreshTime];
  321. [jxh_userDefaults() synchronize];
  322. });
  323. });
  324. }
  325. #pragma mark - 上报设备
  326. - (void)updateDevice {
  327. @weakify(self)
  328. [spsb_globalNetworkManager() networkUseMethod:SPSBNetworkMethodPOST isLogin:false url:spsb_appUrl(SPSBUrlPostDevice) urlParameters:nil parameters:@{@"key": spsb_loginToken(), @"phoneFlag": spsb_getUniquenessString(), @"appPlatform": SPSBAppPlatform} completion:^(NSError * _Nonnull error, id _Nullable data) {
  329. @strongify(self)
  330. if (error.code == SPSBNetworkErrorCodeSuccess) {
  331. [self updatedDevice];
  332. }
  333. }];
  334. }
  335. #pragma mark - 查询补差额订单
  336. - (void)checkPriceDifferencePaymentNotPayOrders {
  337. @weakify(self)
  338. [spsb_globalNetworkManager() networkUseMethod:SPSBNetworkMethodPOST isLogin:true url:spsb_appUrl(SPSBUrlQueryPriceDifferencePaymentNotPayOrders) urlParameters:nil parameters:nil completion:^(NSError * _Nonnull error, id _Nullable data) {
  339. if (error.code == SPSBNetworkErrorCodeSuccess && [data[@"data"] isKindOfClass:[NSArray class]]) {
  340. @strongify(self)
  341. [self handleCheckPriceDifferencePaymentNotPayOrdersData:data];
  342. }
  343. }];
  344. }
  345. - (void)handleCheckPriceDifferencePaymentNotPayOrdersData:(id)data {
  346. if ([data[@"data"] integerValue] > 0) {
  347. UIView *tipsView = UIView.new;
  348. [tipsView setLayerCornerRadius:10 clipToBounds:false];
  349. tipsView.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.75];
  350. [spsb_keyWindow() addSubview:tipsView];
  351. [tipsView makeConstraints:^(JXHConstraintMaker *make) {
  352. make.width.greaterThanOrEqualTo(110);
  353. make.width.lessThanOrEqualTo(215);
  354. make.height.equalTo(110);
  355. make.centerY.equalTo(-64 / 2);
  356. make.centerX.equalTo(0);
  357. }];
  358. UIImageView *imageView = [[UIImageView alloc] initWithImage:jxh_getImage(alarm)];
  359. [tipsView addSubview:imageView];
  360. [imageView makeConstraints:^(JXHConstraintMaker *make) {
  361. make.top.equalTo(15);
  362. make.centerX.equalTo(0);
  363. make.size.equalTo(CGSizeMake(40, 40));
  364. }];
  365. //
  366. UILabel *titleLabel = [UILabel convenienceWithFont:spsb_font(15) text:@"你还有未缴的补差额订单" textColor:spsb_FFFFFF_color(1.f) textAlignment:NSTextAlignmentCenter];
  367. [tipsView addSubview:titleLabel];
  368. [titleLabel makeConstraints:^(JXHConstraintMaker *make) {
  369. make.top.equalTo(imageView.bottom).offset(10);
  370. make.leading.equalTo(10);
  371. make.trailing.equalTo(-10);
  372. make.height.greaterThanOrEqualTo(30);
  373. make.bottom.lessThanOrEqualTo(-10);
  374. }];
  375. [UIView animateWithDuration:3 animations:^{
  376. tipsView.alpha = 0;
  377. } completion:^(BOOL finished) {
  378. [tipsView removeFromSuperview];
  379. }];
  380. }
  381. }
  382. - (void)exitApplication {
  383. UIWindow *window = spsb_keyWindow();
  384. [UIView animateWithDuration:1.0f animations:^{
  385. window.alpha = 0;
  386. window.frame = CGRectMake(0, window.bounds.size.width, 0, 0);
  387. } completion:^(BOOL finished) {
  388. exit(0);
  389. }];
  390. }
  391. - (void)setTempTransferCityRefreshTime:(NSString *)tempTransferCityRefreshTime {
  392. objc_setAssociatedObject(self, _cmd, tempTransferCityRefreshTime, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  393. }
  394. - (NSString *)tempTransferCityRefreshTime {
  395. NSString *object = objc_getAssociatedObject(self, @selector(setTempTransferCityRefreshTime:));
  396. return object;
  397. }
  398. - (void)setTempCityRefreshTime:(NSString *)tempCityRefreshTime {
  399. objc_setAssociatedObject(self, _cmd, tempCityRefreshTime, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  400. }
  401. - (NSString *)tempCityRefreshTime {
  402. NSString *object = objc_getAssociatedObject(self, @selector(setTempCityRefreshTime:));
  403. return object;
  404. }
  405. - (void)setTempQueryCityRefreshTime:(NSString *)tempQueryCityRefreshTime {
  406. objc_setAssociatedObject(self, _cmd, tempQueryCityRefreshTime, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  407. }
  408. - (NSString *)tempQueryCityRefreshTime {
  409. NSString *object = objc_getAssociatedObject(self, @selector(setTempQueryCityRefreshTime:));
  410. return object;
  411. }
  412. @end