123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538 |
- //
- // RQYDTZGZHYQuestionModule.m
- // jiaPei
- //
- // Created by 张嵘 on 2022/4/7.
- // Copyright © 2022 JCZ. All rights reserved.
- //
- #import "RQYDTZGZHYQuestionModule.h"
- static NSString *dbNameStr = @"zgzhy";
- static NSString *dbTypeStr = @"db";
- static NSString *questionTableNameStr = @"web_note";
- @interface RQYDTZGZHYQuestionModule ()
- @property (nonatomic, readwrite, strong) FMDatabaseQueue *databaseQueue;
- @property (nonatomic, readwrite, copy) NSArray *chapterNameSubjectOneArr;
- @property (nonatomic, readwrite, copy) NSArray *chapterNameSubjectFourArr;
- @property (nonatomic, readwrite, assign) RQHomePageCarType carType;
- @end
- @implementation RQYDTZGZHYQuestionModule
- static id rq_ydtZgzHyQuestionModule = nil;
-
- #pragma mark - init
- + (instancetype)sharedInstance {
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- rq_ydtZgzHyQuestionModule = [[self alloc] init];
- });
- return rq_ydtZgzHyQuestionModule;
- }
- - (instancetype)init {
- if (self = [super init]) {
- NSString *resourcePath = [[NSBundle mainBundle] pathForResource:dbNameStr ofType:dbTypeStr];
- [self initDatabaseQueueWithResourcePath:resourcePath];
- }
- return self;
- }
- #pragma mark - PublicMethods
- - (void)initDatabaseQueueWithResourcePath:(NSString *)resourcePath {
- NSError *error;
-
- NSString *dbPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@",dbNameStr,dbTypeStr]];
-
- if ([RQFileManager isPathExist:dbPath]) {
- self.databaseQueue = [FMDatabaseQueue databaseQueueWithPath:dbPath];
- NSLog(@"数据库path-----%@",dbPath);
- if ([self getQuestionVersion] >= [self getQuestionVersionWithResourcePath:resourcePath]) {
- } else {
- [[RQFileManager fileManager] removeItemAtPath:dbPath error:&error];
- [[RQFileManager fileManager] copyItemAtPath:resourcePath toPath:[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@",dbNameStr,dbTypeStr]] error:&error];
- self.databaseQueue = [FMDatabaseQueue databaseQueueWithPath:dbPath];
- }
- } else {
- [[RQFileManager fileManager] copyItemAtPath:resourcePath toPath:[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@",dbNameStr,dbTypeStr]] error:&error];
- self.databaseQueue = [FMDatabaseQueue databaseQueueWithPath:dbPath];
- NSLog(@"数据库path-----%@",dbPath);
- }
- }
- - (NSInteger)getQuestionVersion {
- __block NSInteger version = 0;
- if (_databaseQueue) {
- [_databaseQueue inDatabase:^(FMDatabase * _Nonnull db) {
- FMResultSet *resultSet;
- resultSet = [db executeQuery:@"SELECT version FROM t_version"];
- while ([resultSet next]) {
- version = [resultSet longForColumn:@"version"];
- }
- }];
- }
- return version;
- }
- - (NSInteger)getQuestionVersionWithResourcePath:(NSString *)resourcePath {
- __block NSInteger version = 0;
- [[FMDatabaseQueue databaseQueueWithPath:resourcePath] inDatabase:^(FMDatabase * _Nonnull db) {
- FMResultSet *resultSet;
- resultSet = [db executeQuery:@"SELECT version FROM t_version"];
- while ([resultSet next]) {
- version = [resultSet longForColumn:@"version"];
- }
- }];
- return version;
- }
- - (NSArray *)getQuestionWithSubject:(RQHomePageSubjectType)subject exerciseType:(RQExerciseType)exerciseType {
- return [self getQuestionWithSubject:subject exerciseType:exerciseType isNeedMediaData:NO];
- }
- - (NSArray *)getQuestionWithSubject:(RQHomePageSubjectType)subject exerciseType:(RQExerciseType)exerciseType isNeedMediaData:(BOOL)isNeedMediaData {
- @weakify(self)
- NSMutableArray *arr = @[].mutableCopy;
-
- NSString *queryStr = [self getQuestionQueryStrWithSubject:subject exerciseType:exerciseType];
-
- if (exerciseType == RQExerciseType_Exam) {
- /// 车型
- NSString *queryCarTypeStr = [NSString stringWithFormat:@"gs LIKE '%%%@%%'",RQ_YDTQuestion_Module.carTypeStr];
- /// 科目
- NSString *querySubjectTypeStr = [NSString stringWithFormat:@"kemu = '%@'",[RQ_YDTQuestion_Module getSubjectNameWithSubject:subject]];
- RACSignal *signal0 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
- NSMutableArray *difficultArr = @[].mutableCopy;
- [[[self getExamRuleWithCarType:self.carType subject:subject].rac_sequence.signal map:^id _Nullable(RQYDTExamRuleModel *ydtExamRuleModel) {
- NSString *chapterIdStr = [NSString stringWithFormat:@"strTppe = %ld",(long)ydtExamRuleModel.chapter_id];
- NSString *typeStr = [NSString stringWithFormat:@"Type IN %@",(RQ_YDTQuestion_Module.subject == RQHomePageSubjectType_SubjectOne)? @"(1, 2)" : @"(1, 2, 3)"];
- NSString *randomStr = [NSString stringWithFormat:@"RANDOM() LIMIT %@",[NSString qmui_stringWithNSInteger:ydtExamRuleModel.difficult_count]];
- NSString *difficultQueryStr = [NSString stringWithFormat:@"SELECT DISTINCT * FROM %@ WHERE %@ AND %@ AND diff_degree IN (4, 5) AND cityid = 0 AND %@ AND %@ ORDER BY %@",questionTableNameStr , queryCarTypeStr, querySubjectTypeStr, chapterIdStr, typeStr, randomStr];
- return difficultQueryStr;
- }].toArray.rac_sequence.signal subscribeNext:^(NSString *difficultQueryStr) {
- @strongify(self)
- [difficultArr addObjectsFromArray:[self queryQuestionWithQueryStr:difficultQueryStr]];
- } completed:^{
- [subscriber sendNext:difficultArr.copy];
- [subscriber sendCompleted];
- }];
- return [RACDisposable disposableWithBlock:^{}];
- }];
-
- RACSignal *signal1 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
- NSMutableArray *judgeArr = @[].mutableCopy;
- [[[self getExamRuleWithCarType:self.carType subject:subject].rac_sequence.signal map:^id _Nullable(RQYDTExamRuleModel *ydtExamRuleModel) {
- @strongify(self)
- NSString *chapterIdStr = [NSString stringWithFormat:@"AND strTppe = %ld",(long)ydtExamRuleModel.chapter_id];
- NSString *judgeCountStr = [NSString stringWithFormat:@"RANDOM() LIMIT %ld",(long)ydtExamRuleModel.judge_count];
- NSString *judgeQueryStr = [NSString stringWithFormat:@"SELECT DISTINCT * FROM %@ WHERE %@ AND %@ AND Type = 1 AND diff_degree IN (0,1,2,3) AND cityid = 0 %@ ORDER BY %@",questionTableNameStr , queryCarTypeStr, querySubjectTypeStr, chapterIdStr, judgeCountStr];
- NSMutableArray *judgeChapterArr = [self queryQuestionWithQueryStr:judgeQueryStr].mutableCopy;
- if (judgeChapterArr.count < ydtExamRuleModel.judge_count) {
- NSString *judgeQueryAddStr = [NSString stringWithFormat:@"SELECT DISTINCT * FROM %@ WHERE %@ AND %@ AND Type = 1 AND diff_degree IN (4,5) AND cityid = 0 %@ ORDER BY RANDOM() LIMIT %@",questionTableNameStr , queryCarTypeStr, querySubjectTypeStr, chapterIdStr, [NSString stringWithFormat:@"%ld",(long)(ydtExamRuleModel.judge_count - judgeChapterArr.count)]];
- NSArray *judgeChapterAddArr = [self queryQuestionWithQueryStr:judgeQueryAddStr];
- [judgeChapterArr addObjectsFromArray:judgeChapterAddArr];
- return judgeChapterArr.copy;
- } else {
- return judgeChapterArr.copy;
- }
- }].toArray.rac_sequence.signal subscribeNext:^(NSArray *judgeChapterArr) {
- [judgeArr addObjectsFromArray:judgeChapterArr];
- } completed:^{
- [subscriber sendNext:judgeArr.copy];
- [subscriber sendCompleted];
- }];
- return [RACDisposable disposableWithBlock:^{}];
- }];
-
- RACSignal *signal2 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
- NSMutableArray *choiceArr = @[].mutableCopy;
- [[[self getExamRuleWithCarType:self.carType subject:subject].rac_sequence.signal map:^id _Nullable(RQYDTExamRuleModel *ydtExamRuleModel) {
- @strongify(self)
- NSString *chapterIdStr = [NSString stringWithFormat:@"AND strTppe = %ld",(long)ydtExamRuleModel.chapter_id];
- NSString *choiceCountStr = [NSString stringWithFormat:@"RANDOM() LIMIT %ld",(long)ydtExamRuleModel.choice_count];
- NSString *choiceQueryStr = [NSString stringWithFormat:@"SELECT DISTINCT * FROM %@ WHERE %@ AND %@ AND Type = 2 AND diff_degree IN (0,1,2,3) AND cityid = 0 %@ ORDER BY %@",questionTableNameStr , queryCarTypeStr, querySubjectTypeStr, chapterIdStr, choiceCountStr];
- NSMutableArray *choiceChapterArr = [self queryQuestionWithQueryStr:choiceQueryStr].mutableCopy;
- if (choiceChapterArr.count < ydtExamRuleModel.choice_count) {
- NSString *choiceQueryAddStr = [NSString stringWithFormat:@"SELECT DISTINCT * FROM %@ WHERE %@ AND %@ AND Type = 2 AND diff_degree IN (4,5) AND cityid = 0 %@ ORDER BY RANDOM() LIMIT %@",questionTableNameStr , queryCarTypeStr, querySubjectTypeStr, chapterIdStr, [NSString stringWithFormat:@"%ld",(long)(ydtExamRuleModel.choice_count - choiceChapterArr.count)]];
- NSArray *choiceChapterAddArr = [self queryQuestionWithQueryStr:choiceQueryAddStr];
- [choiceChapterArr addObjectsFromArray:choiceChapterAddArr];
- return choiceChapterArr.copy;
- } else {
- return choiceChapterArr.copy;
- }
- }].toArray.rac_sequence.signal subscribeNext:^(NSArray *choiceChapterArr) {
- [choiceArr addObjectsFromArray:choiceChapterArr];
- } completed:^{
- [subscriber sendNext:choiceArr.copy];
- [subscriber sendCompleted];
- }];
- return [RACDisposable disposableWithBlock:^{}];
- }];
- RACSignal *signal3 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
- NSMutableArray *multipleChoiceArr = @[].mutableCopy;
- [[[self getExamRuleWithCarType:self.carType subject:subject].rac_sequence.signal map:^id _Nullable(RQYDTExamRuleModel *ydtExamRuleModel) {
- @strongify(self)
- NSString *chapterIdStr = [NSString stringWithFormat:@"AND strTppe = %ld",(long)ydtExamRuleModel.chapter_id];
- NSString *multipleChoiceCountStr = [NSString stringWithFormat:@"RANDOM() LIMIT %ld",(long)ydtExamRuleModel.multiple_choice_count];
- NSString *multipleChoiceQueryStr = [NSString stringWithFormat:@"SELECT DISTINCT * FROM %@ WHERE %@ AND %@ AND Type = 3 AND diff_degree IN (0,1,2,3) AND cityid = 0 %@ ORDER BY %@",questionTableNameStr , queryCarTypeStr, querySubjectTypeStr, chapterIdStr, multipleChoiceCountStr];
- NSMutableArray *multipleChoiceChapterArr = [self queryQuestionWithQueryStr:multipleChoiceQueryStr].mutableCopy;
- if (multipleChoiceChapterArr.count < ydtExamRuleModel.multiple_choice_count) {
- NSString *multipleChoiceQueryAddStr = [NSString stringWithFormat:@"SELECT DISTINCT * FROM %@ WHERE %@ AND %@ AND Type = 3 AND diff_degree IN (4,5) AND cityid = 0 %@ ORDER BY RANDOM() LIMIT %@",questionTableNameStr , queryCarTypeStr, querySubjectTypeStr, chapterIdStr, [NSString stringWithFormat:@"%ld",(long)(ydtExamRuleModel.multiple_choice_count - multipleChoiceChapterArr.count)]];
- NSArray *multipleChoiceChapterAddArr = [self queryQuestionWithQueryStr:multipleChoiceQueryAddStr];
- [multipleChoiceChapterArr addObjectsFromArray:multipleChoiceChapterAddArr];
- return multipleChoiceChapterArr.copy;
- } else {
- return multipleChoiceChapterArr.copy;
- }
- }].toArray.rac_sequence.signal subscribeNext:^(NSArray *multipleChoiceChapterArr) {
- [multipleChoiceArr addObjectsFromArray:multipleChoiceChapterArr];
- } completed:^{
- [subscriber sendNext:multipleChoiceArr.copy];
- [subscriber sendCompleted];
- }];
- return [RACDisposable disposableWithBlock:^{}];
- }];
- return [[[RACSignal combineLatest:@[signal0, signal1, signal2, signal3] reduce:^id (NSArray *arr0, NSArray *arr1, NSArray *arr2, NSArray *arr3){
- NSMutableArray *judgeArr = [NSMutableArray arrayWithArray:arr1];
- NSMutableArray *choiceArr = [NSMutableArray arrayWithArray:arr2];
- NSMutableArray *multipleChoiceArr = [NSMutableArray arrayWithArray:arr3];
- dispatch_semaphore_t sema = dispatch_semaphore_create(0);
- [[arr0.rac_sequence.signal filter:^BOOL(RQYDTQuestionModel *ydtDifficultQuestionModel) {
- return ![judgeArr containsObject:ydtDifficultQuestionModel] && ![choiceArr containsObject:ydtDifficultQuestionModel] && ![multipleChoiceArr containsObject:ydtDifficultQuestionModel];
- }].toArray.rac_sequence.signal subscribeNext:^(RQYDTQuestionModel *ydtDifficultQuestionModel) {
- if (ydtDifficultQuestionModel.Type == 1) {
- NSMutableArray *sortChapterArr = [judgeArr.rac_sequence.signal filter:^BOOL(RQYDTQuestionModel *ydtJudgeQuestionModel) {
- return [ydtJudgeQuestionModel.strTppe isEqualToString:ydtDifficultQuestionModel.strTppe] && ![arr0 containsObject:ydtJudgeQuestionModel];
- }].toArray.mutableCopy;
- if (sortChapterArr.count > 0) {
- [judgeArr replaceObjectAtIndex:[judgeArr indexOfObject:sortChapterArr.lastObject] withObject:ydtDifficultQuestionModel];
- }
- } else if (ydtDifficultQuestionModel.Type == 2) {
- NSMutableArray *sortChapterArr = [choiceArr.rac_sequence.signal filter:^BOOL(RQYDTQuestionModel *ydtChoiceQuestionModel) {
- return [ydtChoiceQuestionModel.strTppe isEqualToString:ydtDifficultQuestionModel.strTppe] && ![arr0 containsObject:ydtChoiceQuestionModel];
- }].toArray.mutableCopy;
- if (sortChapterArr.count > 0) {
- [choiceArr replaceObjectAtIndex:[choiceArr indexOfObject:sortChapterArr.lastObject] withObject:ydtDifficultQuestionModel];
- }
- } else {
- NSMutableArray *sortChapterArr = [multipleChoiceArr.rac_sequence.signal filter:^BOOL(RQYDTQuestionModel *ydtMultiChoiceQuestionModel) {
- return [ydtMultiChoiceQuestionModel.strTppe isEqualToString:ydtDifficultQuestionModel.strTppe] && ![arr0 containsObject:ydtMultiChoiceQuestionModel];
- }].toArray.mutableCopy;
- if (sortChapterArr.count > 0) {
- [multipleChoiceArr replaceObjectAtIndex:[multipleChoiceArr indexOfObject:sortChapterArr.lastObject] withObject:ydtDifficultQuestionModel];
- }
- }
- } completed:^{
- /// Key: 按照排序的key; ascending: YES为升序, NO为降序。
- NSSortDescriptor *strTppeSorter = [[NSSortDescriptor alloc] initWithKey:@"strTppe" ascending:YES];
- // NSSortDescriptor *diff_degreeSorter = [NSSortDescriptor sortDescriptorWithKey:@"diff_degree" ascending:YES];
- NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:strTppeSorter, nil];
-
- [arr addObjectsFromArray:[judgeArr sortedArrayUsingDescriptors:sortDescriptors]];
- [arr addObjectsFromArray:[choiceArr sortedArrayUsingDescriptors:sortDescriptors]];
- [arr addObjectsFromArray:[multipleChoiceArr sortedArrayUsingDescriptors:sortDescriptors]];
- dispatch_semaphore_signal(sema);
- }];
- dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
- return arr.copy;
- }] map:^id _Nullable(NSArray *examArr) {
- return examArr;
- }].toArray firstObject];
- return arr.copy;
- } else {
- return [self queryQuestionWithQueryStr:queryStr];
- }
- }
- - (NSArray *)getChapterQuestionWithChapterName:(NSString *)chapterName {
- NSString *queryCarTypeStr = [NSString stringWithFormat:@"gs LIKE '%%%@%%'",RQ_YDTQuestion_Module.carTypeStr];
- NSString *querySubjectTypeStr = [NSString stringWithFormat:@"kemu = '%@'",RQ_YDTQuestion_Module.subjectStr];
- NSString *midStr = [NSString stringWithFormat:@"AND strTppe = %ld",[self getMidWithChapterName:chapterName]];
- NSString *exerciseTypeStr = [NSString stringWithFormat:@"AND ID NOT IN (SELECT ID FROM web_note INNER JOIN jsjp_user_db.test_remove ON test_remove.test_id = web_note.ID)"];
- NSString *orderSqlStr = @"ID + 0 ASC";
- NSString *queryStr = [NSString stringWithFormat:@"SELECT * FROM %@ WHERE %@ AND %@ AND cityid = 0 %@ %@ ORDER BY %@",questionTableNameStr , queryCarTypeStr, querySubjectTypeStr, exerciseTypeStr, midStr, orderSqlStr];
- return [self queryQuestionWithQueryStr:queryStr];
- }
- - (NSArray *)getChapter {
- switch (RQ_YDTQuestion_Module.subject) {
- case RQHomePageSubjectType_SubjectOne:
- return self.chapterNameSubjectOneArr;
- case RQHomePageSubjectType_SubjectFour:
- return self.chapterNameSubjectFourArr;
- default:
- return self.chapterNameSubjectOneArr;
- }
- }
- - (NSArray *)getPoint {
- NSString *queryCarTypeStr = [NSString stringWithFormat:@"gs LIKE '%%%@%%'",RQ_YDTQuestion_Module.carTypeStr];
- NSString *querySubjectTypeStr = [NSString stringWithFormat:@"kemu = '%@'",RQ_YDTQuestion_Module.subjectStr];
- NSString *queryStr = [NSString stringWithFormat:@"SELECT * FROM %@ WHERE %@ AND %@", @"Point", queryCarTypeStr, querySubjectTypeStr];
- return [self queryPointWithQueryStr:queryStr];
- }
- - (NSArray *)getPointQuestionWithPointId:(NSInteger)pointId {
- NSString *queryStr = [NSString stringWithFormat:@"SELECT * FROM %@ WHERE ID IN (SELECT qid FROM point_map WHERE pid = %ld)",questionTableNameStr,pointId];
- return [self queryQuestionWithQueryStr:queryStr];
- }
- - (BOOL)isNewRuleQuestionWithQuestionId:(NSInteger)questionId {
- __block BOOL isNewRule = NO;
- if (_databaseQueue) {
- [_databaseQueue inDatabase:^(FMDatabase * _Nonnull db) {
- FMResultSet *resultSet;
- NSString *queryStr = [NSString stringWithFormat:@"SELECT COUNT(*) AS newRuleNum FROM t_app_question_category WHERE gs LIKE '%@' AND kemu = '%@' AND city_id = 0 AND category = 8 AND question_id = %ld",dbNameStr,RQ_YDTQuestion_Module.subjectStr, (long)questionId];
- resultSet = [db executeQuery:queryStr];
- while ([resultSet next]) {
- NSInteger newRuleNum = [resultSet intForColumn:@"newRuleNum"];
- isNewRule = (newRuleNum != 0);
- }
- }];
- }
- return isNewRule;
- }
- - (NSData *)getMediaDataWithMediaName:(NSString *)mediaName {
- __block NSData *data;
- if (_databaseQueue) {
- [_databaseQueue inDatabase:^(FMDatabase * _Nonnull db) {
- FMResultSet *resultSet;
- NSString *sqlStr = [NSString stringWithFormat:@"SELECT media_content FROM t_app_question_media WHERE media_name LIKE '%@'", mediaName];
- resultSet = [db executeQuery:sqlStr];
- while ([resultSet next]) {
- data = [resultSet columnIsNull:@"media_content"]? nil : [resultSet dataForColumn:@"media_content"];
- }
- }];
- }
- return data;
- }
- - (NSInteger)getQuestionNumWithExerciseType:(RQExerciseType)exerciseType {
- NSString *queryStr = [self getQuestionQueryStrWithSubject:RQHomePageSubjectType_SubjectOne exerciseType:exerciseType];
- NSString *numQueryStr = [NSString stringWithFormat:@"%@ %@",@"SELECT COUNT(*) AS countNum" ,[queryStr componentsSeparatedByString:@"SELECT *"].lastObject];
- __block NSInteger countNum = 0;
- if (_databaseQueue) {
- [_databaseQueue inDatabase:^(FMDatabase * _Nonnull db) {
- FMResultSet *resultSet = [db executeQuery:numQueryStr];
- while ([resultSet next]) {
- countNum = [resultSet intForColumn:@"countNum"];
- }
- }];
- }
- return countNum;
- }
- #pragma mark - Private Method
- - (NSString *)getQuestionQueryStrWithSubject:(RQHomePageSubjectType)subject exerciseType:(RQExerciseType)exerciseType {
- /// 车型
- NSString *queryCarTypeStr = [NSString stringWithFormat:@"gs LIKE '%%%@%%'",RQ_YDTQuestion_Module.carTypeStr];
- /// 科目
- NSString *querySubjectTypeStr = [NSString stringWithFormat:@"kemu = '%@'",[RQ_YDTQuestion_Module getSubjectNameWithSubject:subject]];
- /// 默认按strTppe排序
- NSString *modifyStr = RQ_USER_MANAGER.isLogin? @"AND test_remove.modify_flag = 0" : @"";
- NSString *orderSqlStr = @"strTppe + 0 ASC";
- NSString *collectStr = @"";
- NSString *doStr = @"";
- NSString *removeStr = @"";
- NSString *categoryStr = @"";
- NSString *conditionStr = @"";
-
- switch (exerciseType) {
- case RQExerciseType_Sequential:
- case RQExerciseType_Recitation:
- break;
- case RQExerciseType_Random:
- orderSqlStr = @"RANDOM()";
- break;
- case RQExerciseType_Remove:
- removeStr = [NSString stringWithFormat:@"INNER JOIN jsjp_user_db.test_remove ON test_remove.test_id = web_note.ID %@ AND car_type = %ld",modifyStr,RQ_YDTQuestion_Module.carType];
- break;
- case RQExerciseType_Remove_NotUpload:
- removeStr = [NSString stringWithFormat:@"INNER JOIN jsjp_user_db.test_remove ON test_remove.test_id = web_note.ID AND test_remove.upload_flag = 0 %@ AND car_type = %ld",modifyStr,RQ_YDTQuestion_Module.carType];
- break;
- case RQExerciseType_Collect:
- collectStr = [NSString stringWithFormat:@"INNER JOIN jsjp_user_db.test_collect ON test_collect.test_id = web_note.ID AND car_type = %ld",RQ_YDTQuestion_Module.carType];
- break;
- case RQExerciseType_Collect_NotUpload:
- collectStr = [NSString stringWithFormat:@"INNER JOIN jsjp_user_db.test_collect ON test_collect.test_id = web_note.ID AND test_collect.upload_flag = 0 AND car_type = %ld",RQ_YDTQuestion_Module.carType];
- break;
- case RQExerciseType_Wrong:
- doStr = [NSString stringWithFormat:@"INNER JOIN jsjp_user_db.test_do ON test_do.test_id = web_note.ID AND test_do.is_correct = 0 AND car_type = %ld",RQ_YDTQuestion_Module.carType];
- break;
- case RQExerciseType_Wrong_NotUpload:
- doStr = [NSString stringWithFormat:@"INNER JOIN jsjp_user_db.test_do ON test_do.test_id = web_note.ID AND test_do.is_correct = 0 AND test_do.upload_flag = 0 AND car_type = %ld",RQ_YDTQuestion_Module.carType];
- break;
- case RQExerciseType_Do:
- doStr = [NSString stringWithFormat:@"INNER JOIN jsjp_user_db.test_do ON test_do.test_id = web_note.ID AND car_type = %ld",RQ_YDTQuestion_Module.carType];
- break;
- case RQExerciseType_UnDo:
- doStr = [NSString stringWithFormat:@"LEFT JOIN jsjp_user_db.test_do ON test_do.test_id = web_note.ID AND car_type = %ld",RQ_YDTQuestion_Module.carType];
- conditionStr = @"AND test_do.test_id is NULL";
- break;
- case RQExerciseType_ChooseExLib:
- break;
- case RQExerciseType_Disputed:
- categoryStr = @"category = 1";
- break;
- case RQExerciseType_Mi_One:
- categoryStr = @"category = 3";
- break;
- case RQExerciseType_Mi_Two:
- categoryStr = @"category = 4";
- break;
- case RQExerciseType_HandPick:
- categoryStr = @"category = 5";
- break;
- case RQExerciseType_NewRule:
- categoryStr = @"category = 8";
- break;
- case RQExerciseType_Fallible:
- conditionStr = @"AND diff_degree = 5 AND error_rate >= 0.25";
- break;
- case RQExerciseType_SingleChoice:
- conditionStr = @"AND Type = 2";
- break;
- case RQExerciseType_MutableChoice:
- conditionStr = @"AND Type = 3";
- break;
- case RQExerciseType_Judge:
- conditionStr = @"AND Type = 1";
- break;
- case RQExerciseType_Text:
- conditionStr = @"AND media_url = ''";
- break;
- case RQExerciseType_Image:
- conditionStr = @"AND media_url <> '' AND sinaimg <> ''";
- break;
- case RQExerciseType_Video:
- conditionStr = @"AND media_url <> '' AND video_url <> ''";
- break;
-
- default:
- break;
- }
-
- // NSString *selectQueryStr = isNeedMediaData? @"web_note.*, t_app_question_media.media_content" : @"*";
- NSString *selectQueryStr = @"*";
- NSString *whereQueryStr = [NSString stringWithFormat:@"%@ AND %@ AND cityid = 0", queryCarTypeStr, querySubjectTypeStr];
- NSString *categoryWhereQueryStr = [NSString stringWithFormat:@"%@ AND %@ AND city_id = 0", queryCarTypeStr, querySubjectTypeStr];
-
- NSString *categoryQueryStr = RQStringIsNotEmpty(categoryStr)? [NSString stringWithFormat:@"INNER JOIN ( SELECT MIN(question_id) AS question_id FROM t_app_question_category WHERE %@ AND %@ GROUP BY question_id ) AS t1 ON web_note.ID = t1.question_id ", categoryWhereQueryStr, categoryStr] : @"";
-
- NSString *exerciseTypeQueryStr = [NSString stringWithFormat:@"%@%@%@",collectStr,doStr,removeStr];
-
- // NSString *needMediaDataStr = isNeedMediaData? @"LEFT JOIN t_app_question_media ON t_app_question_media.media_name = web_note.video_url OR t_app_question_media.media_name = web_note.sinaimg" : @"";
- NSString *needMediaDataStr = @"";
-
- NSString *queryStr = [NSString stringWithFormat:@"SELECT %@ FROM web_note %@ %@ %@ WHERE %@ %@ ORDER BY %@", selectQueryStr, categoryQueryStr, exerciseTypeQueryStr, needMediaDataStr, whereQueryStr, conditionStr, orderSqlStr];
-
- return queryStr;
- }
- - (NSArray *)queryQuestionWithQueryStr:(NSString *)queryStr {
- NSMutableArray *arr = @[].mutableCopy;
- [_databaseQueue inDatabase:^(FMDatabase * _Nonnull db) {
- NSString *sqlStr = [NSString stringWithFormat:@"ATTACH DATABASE '%@' AS jsjp_user_db",RQ_YDT_USER_Question_Module.dbPath];
- bool success = [db executeStatements:sqlStr];
- if(!success) {
- NSLog(@"%@", db.lastErrorMessage);
- }
-
- FMResultSet *resultSet = [db executeQuery:queryStr];
- NSInteger num = 0;
- while ([resultSet next]) {
- RQYDTQuestionModel *ydtQuestionModel = [RQYDTQuestionModel ydtQuestionModelWithFMResultSet:resultSet];
- ydtQuestionModel.num = num;
- [arr addObject:ydtQuestionModel];
- num ++;
- }
- [resultSet close];
- }];
- return arr.copy;
- }
- - (NSInteger)getMidWithChapterName:(NSString *)chapterName {
- __block NSInteger mid = 0;
- if (_databaseQueue) {
- [_databaseQueue inDatabase:^(FMDatabase * _Nonnull db) {
- FMResultSet *resultSet;
- NSString *querySubjectTypeStr = [NSString stringWithFormat:@"AND kemu = '%@'",RQ_YDTQuestion_Module.subjectStr];
- NSString *chapterNameStr = [NSString stringWithFormat:@"AND Str = '%@'",chapterName];
- NSString *sqlStr = [NSString stringWithFormat:@"SELECT mid FROM Chapter WHERE Fid = 0 %@ %@",querySubjectTypeStr ,chapterNameStr];
- resultSet = [db executeQuery:sqlStr];
- while ([resultSet next]) {
- mid = [resultSet longForColumn:@"mid"];
- }
- }];
- }
- return mid;
- }
- - (NSArray *)queryPointWithQueryStr:(NSString *)queryStr {
- NSMutableArray *arr = @[].mutableCopy;
- if (_databaseQueue) {
- [_databaseQueue inDatabase:^(FMDatabase * _Nonnull db) {
- FMResultSet *resultSet;
- resultSet = [db executeQuery:queryStr];
- while ([resultSet next]) {
- RQYDTPointModel *ydtPointModel = [RQYDTPointModel ydtPointModelWithFMResultSet:resultSet];
- [arr addObject:ydtPointModel];
- }
- }];
- }
- return arr.copy;
- }
- - (NSArray *)getExamRuleWithCarType:(RQHomePageCarType)carType subject:(RQHomePageSubjectType)subject {
- NSString *queryCarTypeStr = [NSString stringWithFormat:@"gs LIKE '%%%@%%'",RQ_YDTQuestion_Module.carTypeStr];
- NSString *querySubjectTypeStr = [NSString stringWithFormat:@"kemu = '%@'",RQ_YDTQuestion_Module.subjectStr];
- NSString *examRuleTableName = (carType == RQHomePageCarType_ZGZ_HY)? @"t_app_exam_rule_huoyun" : @"t_app_exam_rule";
- NSString *queryStr = [NSString stringWithFormat:@"SELECT * FROM %@ WHERE %@ AND %@ AND areacode = 0 ", examRuleTableName, queryCarTypeStr, querySubjectTypeStr];
- return [self queryExamRuleWithQueryStr:queryStr];
- }
- - (NSArray *)queryExamRuleWithQueryStr:(NSString *)queryStr {
- NSMutableArray *arr = @[].mutableCopy;
- if (_databaseQueue) {
- [_databaseQueue inDatabase:^(FMDatabase * _Nonnull db) {
- FMResultSet *resultSet;
- resultSet = [db executeQuery:queryStr];
- while ([resultSet next]) {
- RQYDTExamRuleModel *ydtExamRuleModel = [RQYDTExamRuleModel ydtExamRuleModelWithFMResultSet:resultSet];
- [arr addObject:ydtExamRuleModel];
- }
- }];
- }
- return arr.copy;
- }
- #pragma mark - LazyLoad
- - (NSArray *)chapterNameSubjectOneArr {
- return @[@"驾驶员的职业道德、职业心理与职业健康",
- @"道路货物运输从业相关法律法规",
- @"道路货物运输相关标准",
- @"道路货物运输专业知识",
- @"汽车使用技术",
- @"道路货物运输安全、应急处置",
- @"货运情景试题",];
- }
- - (NSArray *)chapterNameSubjectFourArr {
- return @[];
- }
- - (RQHomePageCarType)carType {
- return RQHomePageCarType_ZGZ_HY;
- }
- @end
|