// // AppDelegate+SPSBHandleData.m // 我的社保 // // Created by shanp on 2021/4/21. // #import "AppDelegate+SPSBHandleData.h" #import "SPSBBusinessManager.h" #import "SPSBGeneralManager.h" #import #import "SPSBKeyProfile.h" #import "SPSBSQLProfile.h" #import #import "SPSBNetworkManager.h" #import "SPSBURLApiProfile.h" #import "SPSBBaseNetworkModel.h" #import "SPSBOpenADManager.h" #import "SPSBInfoSteamADManager.h" #import "SPSBNotificationDelegateManager.h" #import "SPSBAppDifferenceProfile.h" #import "SPSBADSwitchModel.h" #import "SPSBAppProfileModel.h" #import "SPSBConstantProfile.h" #import "SPSBOpenPopupManager.h" #import "SPSBConfirmAlertViewController.h" #import "AppDelegate+SPSBPopup.h" #import #import #import "AppDelegate+SPSBAutoLogin.h" #import "SPSBUIGeneralHeader.h" @implementation AppDelegate (SPSBHandleData) - (void)createSQL { NSString *orginaPath; NSString *targetPath; NSFileManager *fileManager = [NSFileManager defaultManager];; NSArray *tableNameArray = @[@"shanp_social_insurance", @"shanp_social_insurance_location", @"t_query_city", @"t_transfer_city", @"t_social_Insurance_city", @"t_wait_to_do_data"]; for (NSInteger i = 0; i < tableNameArray.count; i ++) { orginaPath = [[NSBundle mainBundle] pathForResource:tableNameArray[i] ofType:@"db"]; targetPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.db", tableNameArray[i]]]; if ([fileManager fileExistsAtPath:targetPath] == NO) { NSError *error; [fileManager copyItemAtPath:orginaPath toPath:targetPath error:&error]; } } } - (void)handleCache { NSString *city = [jxh_userDefaults() objectForKey:SPSBCheckPublicDataCity]; if (city != nil) { spsb_setLastCheckPublicDataCity(city); } } #pragma mark - 版本容错 static const NSInteger SPSBDeleteIdcareVersion = 17; static const NSInteger SPSBChangeQueryCityVersion = 20;//同时删除了购买人缓存 static const NSInteger SPSBDeleteBadBannerVersion = 24;//删除旧版质量差的图片 static const NSInteger SPSBChangeQueryCityDataVersion = 27;//替换查询城市数据 - (void)versionCompatibility { if ([[jxh_userDefaults() objectForKey:SPSBAppInsideVersion] integerValue] <= 0) return; if ([[jxh_userDefaults() objectForKey:SPSBAppInsideVersion] integerValue] <= SPSBDeleteIdcareVersion) { [JXHFMDBManager updateWithPath:SPSBShanpSocialInsuranceLocationSQL condition:^id(FMDatabase *database) { bool result1 = [database executeUpdate:@"delete from id_card"]; bool result2 = [database executeUpdate:@"delete from cache_data where key not in(?)", SPSBqueryCitySQLKey]; if (!result1 || !result2) { return @NO; } return @YES; }]; } if ([[jxh_userDefaults() objectForKey:SPSBAppInsideVersion] integerValue] <= SPSBChangeQueryCityVersion) { NSFileManager *fileManager = [NSFileManager defaultManager];; NSString *targetPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"t_query_city.db"]; if ([fileManager fileExistsAtPath:targetPath] == YES) { [fileManager removeItemAtPath:targetPath error:nil]; } [JXHFMDBManager updateWithPath:SPSBShanpSocialInsuranceLocationSQL condition:^id(FMDatabase *database) { return @([database executeUpdate:@"delete from cache_data where key = ?", SPSBCachePurchasersSQLKey]); }]; [jxh_userDefaults() removeObjectForKey:SPSBQueryCityRefreshTime]; [jxh_userDefaults() synchronize]; } //删除旧版质量差的图片 if ([[jxh_userDefaults() objectForKey:SPSBAppInsideVersion] integerValue] < SPSBDeleteBadBannerVersion) { jxh_deleteDirInCache(SPSBBarImageList); jxh_createDirInCache(SPSBBarImageList); } //替换查询城市数据 if ([[jxh_userDefaults() objectForKey:SPSBAppInsideVersion] integerValue] <= SPSBChangeQueryCityDataVersion) { NSFileManager *fileManager = [NSFileManager defaultManager];; NSString *targetPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"t_query_city.db"]; if ([fileManager fileExistsAtPath:targetPath] == YES) { [fileManager removeItemAtPath:targetPath error:nil]; } [JXHFMDBManager updateWithPath:SPSBShanpSocialInsuranceLocationSQL condition:^id(FMDatabase *database) { return @([database executeUpdate:@"delete from cache_data where key = ?", SPSBqueryCitySQLKey]); }]; [jxh_userDefaults() removeObjectForKey:SPSBQueryCityRefreshTime]; [jxh_userDefaults() synchronize]; } } - (void)getADSwitch { [spsb_globalNetworkManager() networkUseMethod:SPSBNetworkMethodGET isLogin:false url:spsb_wwwUrl(SPSBUrlADSwitch) urlParameters:nil parameters:nil completion:^(NSError * _Nonnull error, id _Nullable data) { if (error.code == SPSBNetworkErrorCodeSuccess) { SPSBADSwitchModel *model = [SPSBADSwitchModel getModelWithDictionary:data[@"data"]]; spsb_openADManager().spsb_switchStatus = model.spsb_ad_onopen.integerValue; spsb_infoSteamAdManager().spsb_isShowSteamInfo = model.spsb_ad_news.boolValue; spsb_postNotification(SPSBOpenAdNotificationKey, @selector(spsb_gotOpenAdData), spsb_gotOpenAdData); } spsb_postNotification(SPSBAppStatusNotificationKey, @selector(spsb_gotStreamInfoSwitch), spsb_gotStreamInfoSwitch); }]; } - (void)getProfile { @weakify(self) [spsb_globalNetworkManager() networkUseMethod:SPSBNetworkMethodGET isLogin:false url:spsb_wwwUrl(SPSBUrlGetVersion) urlParameters:nil parameters:@{@"appname": SPSBAppNameForOpen} completion:^(NSError * _Nonnull error, id _Nullable data) { if (nil == data[@"data"] || error.code != SPSBNetworkErrorCodeSuccess) return; @strongify(self) SPSBAppProfileModel *model = [SPSBAppProfileModel getModelWithDictionary:data[@"data"]]; if (model.spsb_v.spsb_force.boolValue && model.spsb_v.spsb_force_version.integerValue > SPSBCurrentVersion) { SPSBConfirmAlertViewController *vc = [SPSBConfirmAlertViewController alertWithTitle:@"有新版本更新" content:model.spsb_v.spsb_desc]; @weakify(self) [vc setCancelButtonTitle:@"关闭应用" titleColor:nil action:^{ @strongify(self) [self exitApplication]; }]; [vc setConfirmButtonTitle:@"马上更新" titleColor:nil action:^{ @strongify(self) jxh_openUrl([NSURL URLWithString:SPSBUrlToAppStore], ^(BOOL success) { [self exitApplication]; }); }]; SPSBOpenPopupModel *m = SPSBOpenPopupModel.new; m.spsb_popup = vc; m.spsb_stopPopup = true; [SPSBOpenPopupManager insertPopupAtFirst:m]; return; } if (model.spsb_v.spsb_version.integerValue > SPSBCurrentVersion) { SPSBConfirmAlertViewController *vc = [SPSBConfirmAlertViewController alertWithTitle:@"有新版本更新" content:model.spsb_v.spsb_desc]; [vc setCancelButtonTitle:@"暂不更新" titleColor:nil action:^{ }]; [vc setConfirmButtonTitle:@"马上更新" titleColor:nil action:^{ jxh_openUrl([NSURL URLWithString:SPSBUrlToAppStore], ^(BOOL success) { }); }]; SPSBOpenPopupModel *m = SPSBOpenPopupModel.new; m.spsb_popup = vc; [SPSBOpenPopupManager insertPopup:m]; } if (model.spsb_pop_img.spsb_img.length > 0) { [self judgeAdPopup:model.spsb_pop_img]; } if (model.spsb_tel.length > 0) { [jxh_userDefaults() setObject:model.spsb_tel forKey:SPSBCustomerServicePhone]; [jxh_userDefaults() synchronize]; } spsb_setHomeViewButtons(model.spsb_entranceFlag); spsb_postNotification(SPSBAppStatusNotificationKey, @selector(spsb_appNeedRefreshHomeViewButtons), spsb_appNeedRefreshHomeViewButtons); spsb_postNotification(SPSBAppStatusNotificationKey, @selector(spsb_appNeedRefreshBannerImages:actions:), spsb_appNeedRefreshBannerImages:model.spsb_barList actions:model.spsb_uriList); spsb_setAdsArray(model.spsb_ads); spsb_postNotification(SPSBAppStatusNotificationKey, @selector(spsb_appNeedRefreshHomeViewAds), spsb_appNeedRefreshHomeViewAds); spsb_setPolicyArray(model.spsb_index_policy); spsb_postNotification(SPSBAppStatusNotificationKey, @selector(spsb_appNeedRefreshHomeViewPolicy), spsb_appNeedRefreshHomeViewPolicy); if (![jxh_userDefaults() objectForKey:SPSBCityRefreshTime] || [[jxh_userDefaults() objectForKey:SPSBCityRefreshTime] integerValue] != model.spsb_city.integerValue) { self.tempCityRefreshTime = model.spsb_city; [self getCityList]; } if (![jxh_userDefaults() objectForKey:SPSBQueryCityRefreshTime] || [[jxh_userDefaults() objectForKey:SPSBQueryCityRefreshTime] integerValue] != model.spsb_query.integerValue) { self.tempQueryCityRefreshTime = model.spsb_query; [self getQueryCityList]; } if (![jxh_userDefaults() objectForKey:SPSBTransferCityRefreshTime] || [[jxh_userDefaults() objectForKey:SPSBTransferCityRefreshTime] integerValue] != model.spsb_move_city.integerValue) { self.tempTransferCityRefreshTime = model.spsb_move_city; [self getTransferCityList]; } if (model.spsb_wxpay_limit.length > 0) { spsb_setWxpayLimit(model.spsb_wxpay_limit.integerValue); } }]; } #pragma mark - 获取城市列表 - (void)getCityList { @weakify(self) [spsb_globalNetworkManager() networkUseMethod:SPSBNetworkMethodGET isLogin:false url:spsb_appUrl(SPSBUrlGetCityList) urlParameters:nil parameters:nil completion:^(NSError * _Nonnull error, id _Nullable data) { if (error.code == SPSBNetworkErrorCodeSuccess && [data[@"data"] isKindOfClass:[NSArray class]]) { @strongify(self) [self handleCityWithArray:data[@"data"]]; } }]; } - (void)handleCityWithArray:(NSArray *)array { dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSString *sqlStr = [self appendSqlStrWithArray:array]; dispatch_async(dispatch_get_main_queue(), ^{ [JXHFMDBManager updateWithPath:SPSBShanpSocialInsuranceSQL condition:^id(FMDatabase *database) { return @([database executeUpdate:@"delete from t_sp_city"]); }]; [JXHFMDBManager updateWithPath:SPSBShanpSocialInsuranceSQL condition:^id(FMDatabase *database) { return @([database executeUpdate:sqlStr]); }]; [jxh_userDefaults() setObject:self.tempCityRefreshTime forKey:SPSBCityRefreshTime]; [jxh_userDefaults() synchronize]; }); }); } - (NSString *)appendSqlStrWithArray:(NSArray *)array { NSMutableString *sqlStr = [NSMutableString stringWithString:@"insert into t_sp_city (id, parent_id, name, is_city) values"]; for (NSInteger i = 0; i < array.count; i ++) { [sqlStr appendFormat:@"('%@', '%@', '%@', '%@'),", array[i][@"id"], array[i][@"pid"], array[i][@"name"], array[i][@"isCity"]]; if (i == array.count - 1) { [sqlStr replaceCharactersInRange:NSMakeRange(sqlStr.length - 1, 1) withString:@""]; } } return sqlStr; } #pragma mark - 获取查询城市列表 - (void)getQueryCityList { @weakify(self) [spsb_globalNetworkManager() networkUseMethod:SPSBNetworkMethodGET isLogin:false url:spsb_appUrl(SPSBUrlGetQueryCityList) urlParameters:nil parameters:nil completion:^(NSError * _Nonnull error, id _Nullable data) { if (error.code == SPSBNetworkErrorCodeSuccess && [data[@"data"] isKindOfClass:[NSArray class]]) { @strongify(self) [self handleQueryCityWithArray:data[@"data"]]; } }]; } - (void)handleQueryCityWithArray:(NSArray *)array { dispatch_async(dispatch_get_global_queue(0, 0), ^{ 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"]; NSMutableArray *keyArray = [@[@"热"] mutableCopy]; NSMutableArray *idArray = [@[@{@"热" : [@[] mutableCopy]}] mutableCopy]; NSMutableArray *dataArray = [@[@{@"热" : [@[] mutableCopy]}] mutableCopy]; NSMutableDictionary *data = [@{} mutableCopy]; NSMutableDictionary *idData = [@{} mutableCopy]; for (NSInteger i = 0; i < array.count; i ++) { SPSBBaseNetworkModel *baseModel = SPSBBaseNetworkModel.new; NSString *name = [baseModel getStringDataWithDictionary:array[i] variable:@"city_name"]; NSString *cid = [baseModel getStringDataWithDictionary:array[i] variable:@"cid"]; if (name.length == 0 || cid.length == 0) { continue; } NSMutableString *namePinyin = [name mutableCopy]; CFStringTransform((__bridge CFMutableStringRef)namePinyin, 0, kCFStringTransformMandarinLatin, NO); CFStringTransform((__bridge CFMutableStringRef)namePinyin, 0, kCFStringTransformStripDiacritics, NO); NSString *key = [[namePinyin substringWithRange:NSMakeRange(0, 1)] uppercaseString]; if (!data[key]) { data[key] = [@[] mutableCopy]; idData[key] = [@[] mutableCopy]; } [data[key] addObject:name]; [idData[key] addObject:cid]; if (array[i][@"hot"] && [array[i][@"hot"] boolValue]) { [dataArray[0][@"热"] addObject:name]; [idArray[0][@"热"] addObject:cid]; } // NSArray *pinyinArray = [namePinyin componentsSeparatedByString:@" "]; NSMutableString *pinyinAbbreviation = [@"" mutableCopy]; for (NSInteger i = 0; i < pinyinArray.count; i ++) { [pinyinAbbreviation appendString:[pinyinArray[i] substringWithRange:NSMakeRange(0, 1)]]; } [sqlStr appendFormat:@"('%@', '%@', '%@', '%@', '%@', '%@', '%@', '%@', '%@', '%@'),", cid, name, [baseModel getStringDataWithDictionary:array[i] variable:@"shebao_site"], [baseModel getStringDataWithDictionary:array[i] variable:@"shebao_wx"], [baseModel getStringDataWithDictionary:array[i] variable:@"shebao_tel"], [baseModel getStringDataWithDictionary:array[i] variable:@"fund_site"], [baseModel getStringDataWithDictionary:array[i] variable:@"fund_wx"], [baseModel getStringDataWithDictionary:array[i] variable:@"fund_tel"], [namePinyin stringByReplacingOccurrencesOfString:@" " withString:@""], pinyinAbbreviation]; } [sqlStr replaceCharactersInRange:NSMakeRange(sqlStr.length - 1, 1) withString:@""]; for (int i = 0; i < 26; i ++) { NSString *str = [NSString stringWithFormat:@"%c",65 + i]; if (data[str]) { [keyArray addObject:str]; [dataArray addObject:[@{str : data[str]} mutableCopy]]; [idArray addObject:[@{str: idData[str]} mutableCopy]]; } } dispatch_async(dispatch_get_main_queue(), ^{ [JXHFMDBManager updateWithPath:SPSBShanpSocialInsuranceLocationSQL condition:^id(FMDatabase *database) { return @([database executeUpdate:@"delete from cache_data where key = ?", SPSBqueryCitySQLKey]); }]; NSData *archiverData = jxh_archiver(@{@"data" : dataArray, @"key" : keyArray, @"id": idArray}, SPSBqueryCitySQLKey); [JXHFMDBManager updateWithPath:SPSBShanpSocialInsuranceLocationSQL condition:^id(FMDatabase *database) { return @([database executeUpdate:@"insert into cache_data (key, data) values (?, ?)", SPSBqueryCitySQLKey, archiverData]); }]; [JXHFMDBManager updateWithPath:SPSBShanpQueryCitySQL condition:^id(FMDatabase *database) { return @([database executeUpdate:@"delete from t_sp_query_city"]); }]; [JXHFMDBManager updateWithPath:SPSBShanpQueryCitySQL condition:^id(FMDatabase *database) { return @([database executeUpdate:sqlStr]); }]; [jxh_userDefaults() setObject:self.tempQueryCityRefreshTime forKey:SPSBQueryCityRefreshTime]; [jxh_userDefaults() synchronize]; }); }); } #pragma mark - 获取转移城市列表 - (void)getTransferCityList { @weakify(self) [spsb_globalNetworkManager() networkUseMethod:SPSBNetworkMethodPOST isLogin:false url:spsb_appUrl(SPSBUrlGetTransferCity) urlParameters:nil parameters:nil completion:^(NSError * _Nonnull error, id _Nullable data) { if (error.code == SPSBNetworkErrorCodeSuccess && [data[@"data"] isKindOfClass:[NSArray class]]) { @strongify(self) [self handleTransferCityWithArray:data[@"data"]]; } }]; } - (void)handleTransferCityWithArray:(NSArray *)array { dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSString *sqlStr = [self appendSqlStrWithArray:array]; dispatch_async(dispatch_get_main_queue(), ^{ [JXHFMDBManager updateWithPath:SPSBShanpTransferCitySQL condition:^id(FMDatabase *database) { return @([database executeUpdate:@"delete from t_sp_city"]); }]; [JXHFMDBManager updateWithPath:SPSBShanpTransferCitySQL condition:^id(FMDatabase *database) { return @([database executeUpdate:sqlStr]); }]; [jxh_userDefaults() setObject:self.tempTransferCityRefreshTime forKey:SPSBTransferCityRefreshTime]; [jxh_userDefaults() synchronize]; }); }); } #pragma mark - 上报设备 - (void)updateDevice { @weakify(self) [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) { @strongify(self) if (error.code == SPSBNetworkErrorCodeSuccess) { [self updatedDevice]; } }]; } #pragma mark - 查询补差额订单 - (void)checkPriceDifferencePaymentNotPayOrders { @weakify(self) [spsb_globalNetworkManager() networkUseMethod:SPSBNetworkMethodPOST isLogin:true url:spsb_appUrl(SPSBUrlQueryPriceDifferencePaymentNotPayOrders) urlParameters:nil parameters:nil completion:^(NSError * _Nonnull error, id _Nullable data) { if (error.code == SPSBNetworkErrorCodeSuccess && [data[@"data"] isKindOfClass:[NSArray class]]) { @strongify(self) [self handleCheckPriceDifferencePaymentNotPayOrdersData:data]; } }]; } - (void)handleCheckPriceDifferencePaymentNotPayOrdersData:(id)data { if ([data[@"data"] integerValue] > 0) { UIView *tipsView = UIView.new; [tipsView setLayerCornerRadius:10 clipToBounds:false]; tipsView.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.75]; [spsb_keyWindow() addSubview:tipsView]; [tipsView makeConstraints:^(JXHConstraintMaker *make) { make.width.greaterThanOrEqualTo(110); make.width.lessThanOrEqualTo(215); make.height.equalTo(110); make.centerY.equalTo(-64 / 2); make.centerX.equalTo(0); }]; UIImageView *imageView = [[UIImageView alloc] initWithImage:jxh_getImage(alarm)]; [tipsView addSubview:imageView]; [imageView makeConstraints:^(JXHConstraintMaker *make) { make.top.equalTo(15); make.centerX.equalTo(0); make.size.equalTo(CGSizeMake(40, 40)); }]; // UILabel *titleLabel = [UILabel convenienceWithFont:spsb_font(15) text:@"你还有未缴的补差额订单" textColor:spsb_FFFFFF_color(1.f) textAlignment:NSTextAlignmentCenter]; [tipsView addSubview:titleLabel]; [titleLabel makeConstraints:^(JXHConstraintMaker *make) { make.top.equalTo(imageView.bottom).offset(10); make.leading.equalTo(10); make.trailing.equalTo(-10); make.height.greaterThanOrEqualTo(30); make.bottom.lessThanOrEqualTo(-10); }]; [UIView animateWithDuration:3 animations:^{ tipsView.alpha = 0; } completion:^(BOOL finished) { [tipsView removeFromSuperview]; }]; } } - (void)exitApplication { UIWindow *window = spsb_keyWindow(); [UIView animateWithDuration:1.0f animations:^{ window.alpha = 0; window.frame = CGRectMake(0, window.bounds.size.width, 0, 0); } completion:^(BOOL finished) { exit(0); }]; } - (void)setTempTransferCityRefreshTime:(NSString *)tempTransferCityRefreshTime { objc_setAssociatedObject(self, _cmd, tempTransferCityRefreshTime, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } - (NSString *)tempTransferCityRefreshTime { NSString *object = objc_getAssociatedObject(self, @selector(setTempTransferCityRefreshTime:)); return object; } - (void)setTempCityRefreshTime:(NSString *)tempCityRefreshTime { objc_setAssociatedObject(self, _cmd, tempCityRefreshTime, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } - (NSString *)tempCityRefreshTime { NSString *object = objc_getAssociatedObject(self, @selector(setTempCityRefreshTime:)); return object; } - (void)setTempQueryCityRefreshTime:(NSString *)tempQueryCityRefreshTime { objc_setAssociatedObject(self, _cmd, tempQueryCityRefreshTime, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } - (NSString *)tempQueryCityRefreshTime { NSString *object = objc_getAssociatedObject(self, @selector(setTempQueryCityRefreshTime:)); return object; } @end