GXFFunctionDB.m 10.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
//
//  GXFFunctionDB.m
//  XFFruit
//
//  Created by freecui on 15/8/27.
//  Copyright (c) 2015年 Xummer. All rights reserved.
//

#define DATABASE_PATH [[NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject]stringByAppendingString:@"function.db"]
//#define DATABASE_PATH [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]stringByAppendingString:@"/weChat.db"]
//FMDB
//#define FMDBQuickCheck(SomeBool) { if (!(SomeBool)) { NSLog(@"Failure on line %d", __LINE__); abort(); } }

#import "GXFFunctionDB.h"

@interface GXFFunctionDB ()
@property (nonatomic, strong) FMDatabase *dataBase;

@end
@implementation GXFFunctionDB

+ (GXFFunctionDB *)sharedInstance {
    static GXFFunctionDB *functionDb = nil;
    static dispatch_once_t once;
    dispatch_once(&once, ^{
        functionDb = [[GXFFunctionDB alloc]init];
    });
    return functionDb;
}
- (BOOL)openDb {
    // NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject];
    NSString *dbPath = [path stringByAppendingString:@"function.db"];
    self.dataBase = [FMDatabase databaseWithPath:dbPath];
    CLog(@"dbPath = %@",dbPath);
    BOOL isOpen = [_dataBase open];
    if (!isOpen) {
         NSLog(@"数据库打开失败");
    }
        return isOpen;
    
}
- (void)createTables {
    if ([self openDb]) {
        [self functionTableCreate];
        [self displayFunctionTableCreate];
    }
}




- (BOOL)functionTableCreate {
//    if (![_dataBase open]) {
//        [self openDb];
//    }
    
 
    //Id INTEGER NOT NULL PRIMARY KEY UNIQUE CONFLICT REPLACE
    NSString *createTableSql = @"CREATE TABLE IF NOT EXISTS function (Id INTEGER PRIMARY KEY NOT NULL UNIQUE ,name VARCHAR,caption VARCHAR,hasPermission INTEGER,isSelected INTEGER) ";//CONFLICT REPLACE
    BOOL work = [_dataBase executeUpdate:createTableSql];
    
    return work;
}
- (BOOL)displayFunctionTableCreate {
    if (![_dataBase open]) {
        [self openDb];
    }
freecui's avatar
freecui committed
69
    NSString *createTableSql = @"CREATE TABLE IF NOT EXISTS displayFunction (Id INTEGER PRIMARY KEY AUTOINCREMENT,functionId INTEGER,functionName VARCHAR ,functionImgName VARCHAR,functionSmallImgName VARCHAR,  isSelected INTEGER,functionItemTag INTEGER )";
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
    BOOL work = [_dataBase executeUpdate:createTableSql];
    
    return work;
}

//+(BOOL)checkTableCreatedInDb:(FMDatabase *)db
//{
//    NSString *createTableSql = @"CREATE TABLE IF NOT EXISTS function (Id INTEGER PRIMARY KEY NOT NULL UNIQUE ,name VARCHAR,caption VARCHAR,hasPermission INTEGER,isSelected INTEGER) ";//CONFLICT REPLACE
//    BOOL worked = [db executeUpdate:createTableSql];
//    FMDBQuickCheck(worked);
//    return worked;
//}
//插入数据:从最初的json文件读入时 没有任何权限跟所有的功能都没有选中
- (BOOL)insertFunction: (GXFFunction *)function {
//    FMDatabase *db = [FMDatabase databaseWithPath:DATABASE_PATH];
//    if (![db open]) {
//        NSLog(@"数据库打开失败");
//        return YES;
//    };
//    [GXFFunctionDB checkTableCreatedInDb:db];
    
    NSString *inserSql = @"INSERT INTO  function (Id,name,caption,hasPermission,isSelected) VALUES(?,?,?,?,?)";
    BOOL work = [_dataBase executeUpdate:inserSql,@(function.Id),function.name,function.caption,@(function.hasPermission) ,@(function.isSelected)];//@(120),@"gg",@"fff",@(1),@(1)];
    
   // [db close];
    return work;
}
freecui's avatar
freecui committed
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113


//查找一条数据
- (GXFFunction *)functionSelectWithId: (NSInteger)Id{
    GXFFunction *function = [[GXFFunction alloc]init];
    FMResultSet *rs = [_dataBase executeQuery:@"SELECT * FROM  function WHERE Id = ? ",@(Id)];
    while ([rs next]) {
        function.Id = [rs intForColumnIndex:0];
        function.name = [rs stringForColumnIndex:1];
        function.caption = [rs stringForColumnIndex:2];
        function.hasPermission = [rs intForColumnIndex:3];
        function.isSelected = [rs intForColumnIndex:4];
        break;
    }
    return function;

}
114 115
//更新权限
- (BOOL)updateFunctionHasPermissionWithId: (GXFFunction *)function{
freecui's avatar
freecui committed
116 117
    //GXFFunction *function = [self functionSelectWithId:Id];
    BOOL work = [_dataBase executeUpdate:@"UPDATE function SET hasPermission = ? where Id = ?",@(function.hasPermission),@(function.Id)];
118 119 120 121 122 123 124
    return work;
}
//更新是否选中
- (BOOL)updateFunctionIsSelectedWithId: (GXFFunction *)function{
    BOOL work = [_dataBase executeUpdate:@"UPDATE function SET isSelected = ? where Id = ?",function.isSelected,function.Id];
    return work;
}
freecui's avatar
freecui committed
125 126 127 128 129 130 131 132 133 134 135 136
//返回全部原始数据的function
- (NSArray *)originFunctions {
    NSMutableArray *muArr = [NSMutableArray array];
    FMResultSet *rs = [_dataBase executeQuery: @"SELECT * FROM function"];
    while ([rs next]) {
        GXFFunction *function = [[GXFFunction alloc]init];
        function.Id = [rs intForColumn:@"Id"];
        [muArr addObject:function];
    }
    
    return muArr;
}
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
//返回全部有权限的function
- (NSArray *)functionsHasPermission {
    NSMutableArray *muArr = [NSMutableArray array];
    FMResultSet *rs = [_dataBase executeQuery: @"SELECT * FROM function WHERE hasPermission = ?",[NSNumber numberWithBool:1]];
    while ([rs next]) {
        GXFFunction *function = [[GXFFunction alloc]init];
        function.Id = [rs intForColumn:@"Id"];
        [muArr addObject:function];
    }
    
    return muArr;
}
- (NSArray *)p_functionsIdPermission {
    NSMutableArray *muArr = [NSMutableArray array];
    FMResultSet *rs = [_dataBase executeQuery: @"SELECT Id FROM function WHERE hasPermission = ?",[NSNumber numberWithBool:1]];
    while ([rs next]) {
       NSInteger Id = [rs intForColumn:@"Id"];
        [muArr addObject:@(Id)];
    }
    
    return muArr;
}
//既有权限又被选择的
- (NSArray *)functionsHasPermissionAndIsSelected{
    NSMutableArray *muArr = [NSMutableArray array];
    FMResultSet *rs = [_dataBase executeQuery: @"SELECT * FROM function WHERE hasPermission = ?,isSelected = ?",[NSNumber numberWithBool:1],[NSNumber numberWithBool:1]];
    while ([rs next]) {
        GXFFunction *function = [[GXFFunction alloc]init];
        function.Id = [rs intForColumn:@"Id"];
        [muArr addObject:function];
    }
    
    return muArr;
}
- (NSArray *)p_functionsHasPermissionAndIsSelected{
    NSMutableArray *muArr = [NSMutableArray array];
    FMResultSet *rs = [_dataBase executeQuery: @"SELECT Id FROM function WHERE hasPermission = ?,isSelected = ?",[NSNumber numberWithBool:1],[NSNumber numberWithBool:1]];
    while ([rs next]) {
        NSInteger Id = [rs intForColumn:@"Id"];
        [muArr addObject:@(Id)];
    }
    
    return muArr;
}


freecui's avatar
freecui committed
183 184 185 186 187 188 189 190 191 192 193 194 195













196 197 198
#pragma displayFunction
- (BOOL)insertDisplayFunction: (GXFDisplayFunction *)displayFunction {
    
freecui's avatar
freecui committed
199 200
    NSString *inserSql = @"INSERT INTO  displayFunction(functionId,functionName,functionImgName,functionSmallImgName,functionItemTag) VALUES(?,?,?,?,?)";
    BOOL work = [_dataBase executeUpdate:inserSql,@(displayFunction.functionId),displayFunction.functionName,displayFunction.functionImgName,displayFunction.functionSmallImgName,@(displayFunction.functionItemTag)];
201 202 203 204 205 206 207 208 209 210 211
    
    return work;
}
- (GXFDisplayFunction *)selectDisplayFunctionByFunctionId: (NSInteger)functionId{
    GXFDisplayFunction *displayFunction = [[GXFDisplayFunction alloc]init];
    FMResultSet *rs = [_dataBase executeQuery:@"SELET * FROM  displayFunction WHERE functionId = ? ",@(functionId)];
    while ([rs next]) {
        displayFunction.functionId = [rs intForColumn:@"functionId"];
        displayFunction.functionName = [rs stringForColumn:@"functionName"];
        displayFunction.functionImgName = [rs stringForColumn:@"functionImgName"];
        displayFunction.functionSmallImgName = [rs stringForColumn:@"functionSmallImgName"];
freecui's avatar
freecui committed
212
        displayFunction.functionItemTag = [rs intForColumn:@"functionItemTag"];
213 214 215 216
        break;
    }
    return displayFunction;
}
freecui's avatar
freecui committed
217 218 219 220 221
//更新是否选中
- (BOOL)updateDisplayFunctionIsSelectedWithId: (GXFDisplayFunction *)displayFunction{
    BOOL work = [_dataBase executeUpdate:@"UPDATE displayFunction SET isSelected = ? where functionId = ?",@(displayFunction.isSelected),@(displayFunction.functionId)];
    return work;
}
222 223 224 225 226 227 228 229
#pragma 有权限的displayfunctions
//待改正,最好的办法是两张表关联起来查找但是我还没做到
-(NSArray *)displayFunctionsHasPermission{
    
    NSMutableArray *muArr = [NSMutableArray array];
    
    NSArray *hasPermission = [self p_functionsIdPermission];
    for (int count = 0; count < hasPermission.count; count ++) {
freecui's avatar
freecui committed
230
        FMResultSet *rs = [_dataBase executeQuery: @"SELECT * FROM displayFunction WHERE functionId = ?",hasPermission[count] ];
231
        while ([rs next]) {
freecui's avatar
freecui committed
232
            GXFDisplayFunction *displayFunction = [self p_resultSetDisplayFunction:rs];
233 234 235
            [muArr addObject:displayFunction];

        }
freecui's avatar
freecui committed
236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
    }
    return muArr;
}

//默认配置显示功能  初始配置为
- (NSArray *)defaultdisplayFunctions {
    NSMutableArray *arr = [NSMutableArray arrayWithArray:[self displayFunctionsHasPermission]];
    for (int count = 0; count < arr.count; count ++) {
        if ((count % 2) || (count == 0)) {
            GXFDisplayFunction *displayFunction = (GXFDisplayFunction *)arr[count];
            displayFunction.isSelected = YES;
            [self updateDisplayFunctionIsSelectedWithId:displayFunction];
            [arr replaceObjectAtIndex:count withObject:displayFunction];
        }
    }
    
    return arr;
}
254

freecui's avatar
freecui committed
255 256 257 258 259 260 261
//返回全部原始数据的function
- (NSArray *)originDisplayFunctions {
    NSMutableArray *muArr = [NSMutableArray array];
    FMResultSet *rs = [_dataBase executeQuery: @"SELECT * FROM displayFunction"];
    while ([rs next]) {
        GXFDisplayFunction *displayFunction = [self p_resultSetDisplayFunction:rs];
        [muArr addObject:displayFunction];
262
    }
freecui's avatar
freecui committed
263
    
264 265 266
    return muArr;
}

freecui's avatar
freecui committed
267 268 269 270 271 272 273
- (GXFDisplayFunction *)p_resultSetDisplayFunction: (FMResultSet *)rs {
    GXFDisplayFunction *displayFunction = [[GXFDisplayFunction  alloc]init];
    displayFunction.functionId = [rs intForColumn:@"functionId"];
    displayFunction.functionName = [rs stringForColumn:@"functionName"];
    displayFunction.functionImgName = [rs stringForColumn:@"functionImgName"];
    displayFunction.functionSmallImgName = [rs stringForColumn:@"functionSmallImgName"];
    displayFunction.isSelected = [rs intForColumn:@"isSelected"];
freecui's avatar
freecui committed
274
    displayFunction.functionItemTag = [rs intForColumn:@"functionItemTag"];
freecui's avatar
freecui committed
275 276 277 278 279 280 281 282 283 284 285 286 287
    return displayFunction;
}
//返回被选中的
- (NSArray *)isSelectedDisplayFunctions {
    NSMutableArray *muArr = [NSMutableArray array];
    FMResultSet *rs = [_dataBase executeQuery: @"SELECT * FROM displayFunction WHERE isSelected = ?",@(1)];
    while ([rs next]) {
        GXFDisplayFunction *displayFunction = [self p_resultSetDisplayFunction:rs];
        [muArr addObject:displayFunction];
    }
    
    return muArr;
}
288
@end