123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839 |
- //
- // roomData.m
- // shiku_im
- //
- // Created by flyeagleTang on 15-2-6.
- // Copyright (c) 2015年 Reese. All rights reserved.
- //
- #import "roomData.h"
- #import "FMDatabase.h"
- #import "FMResultSet.h"
- #import "FMDatabaseQueue.h"
- #import "SDWebImageManager.h"
- #import <UIKit/UIKit.h>
- #import "QQHeader.h"
- @interface memberData ()
- @property (nonatomic,strong) FMDatabaseQueue *dataArr;
- @end
- @implementation roomData
- @synthesize countryId;//国家
- @synthesize provinceId;//省份
- @synthesize cityId;//城市
- @synthesize areaId;//区域
- @synthesize name;//名字
- @synthesize desc;//名字
- @synthesize longitude;
- @synthesize latitude;
- @synthesize category;
- @synthesize maxCount;
- @synthesize curCount;
- @synthesize createTime;
- @synthesize updateTime;
- @synthesize updateUserId;
- @synthesize roomId;
- @synthesize subject;
- @synthesize userId;
- @synthesize userNickName;
- //@synthesize members;
- @synthesize note;
- @synthesize roomJid;
- -(id)init{
- self = [super init];
- _members = [[NSMutableArray alloc]init];
- return self;
- }
- +(void)roomHeadImageRoomId:(NSString *)roomId toView:(UIImageView *)toView{
- roomData * room = [[roomData alloc]init];
- room.roomId = roomId;
- // [room roomHeadImageToView:toView];
- }
- -(void)roomHeadImageToView:(UIImageView *)toView{
-
- //获取全部
- NSArray * allMem = [memberData fetchAllMembers:self.roomId];
- if (toView){
- toView.image = [UIImage imageNamed:@"groupImage"];//先设置一张默认群组图片
- }
- if(!allMem || allMem.count <= 1){
- return;//数据库没有值
- }
-
- NSMutableArray * userIdArr = [[NSMutableArray alloc] init];
- NSMutableArray * downLoadImageArr = [[NSMutableArray alloc] init];
- __block int finishCount = 0;
- NSString * roomIdStr = [self.roomJid mutableCopy];
-
- if (roomIdStr.length <= 0) {
- return;
- }
-
- dispatch_async(dispatch_get_global_queue(0, 0), ^{
- //webcache
- SDWebImageManager * manager = [SDWebImageManager sharedManager];
- for (int i = 0; (i<allMem.count) && (i<10); i++) {
- memberData * member = allMem[i];
- //取userId
- long longUserId = member.userId;
- if (longUserId >= 10000000){
- [userIdArr addObject:[NSNumber numberWithLong:longUserId]];
- }
- if(userIdArr.count >= 5)
- break;
- }
- for (NSNumber * userIdNum in userIdArr) {
- NSString* dir = [NSString stringWithFormat:@"%ld",[userIdNum longValue] % 10000];
- NSString* url = [NSString stringWithFormat:@"%@avatar/t/%@/%@.jpg",g_config.downloadAvatarUrl,dir,userIdNum];
-
- [manager loadImageWithURL:[NSURL URLWithString:url] options:SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
-
- } completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) {
- finishCount++;
- if(image){
- [downLoadImageArr addObject:image];
- }
- if(error){
-
- }
- if (downLoadImageArr.count >= 5 || finishCount >= userIdArr.count){
- if (downLoadImageArr.count <userIdArr.count){
- UIImage * defaultImage = [UIImage imageNamed:@"userhead"];
- for (int i=(int)downLoadImageArr.count; i<userIdArr.count; i++) {
- [downLoadImageArr addObject:defaultImage];
- }
- }
- //生成群头像
- UIImage * drawimage = [self combineImage:downLoadImageArr];
- dispatch_async(dispatch_get_main_queue(), ^{
- NSDictionary * groupDict = @{@"groupHeadImage":drawimage,@"roomJid":roomIdStr};
- [g_notify postNotificationName:kGroupHeadImageModifyNotifaction object:groupDict];
- if (toView) {
- toView.image = drawimage;
- }
-
- NSString *groupImagePath = [NSString stringWithFormat:@"%@%@/%@.%@",NSTemporaryDirectory(),g_myself.userId,roomIdStr,@"jpg"];
- if (groupImagePath && [[NSFileManager defaultManager] fileExistsAtPath:groupImagePath]) {
- NSError * error = nil;
- [[NSFileManager defaultManager] removeItemAtPath:groupImagePath error:&error];
- if (error)
- NSLog(@"删除文件错误:%@",error);
- }
- [g_server saveImageToFile:drawimage file:groupImagePath isOriginal:NO];
- // g_notify postNotificationName:<#(nonnull NSNotificationName)#> object:<#(nullable id)#>
- return ;
- });
- }
- }];
-
- // [manager downloadImageWithURL:[NSURL URLWithString:url] options:SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize) {
- //
- // } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
- //
- // }];
- }
-
- });
- }
- - (UIImage *)combineImage:(NSArray *)imageArray {
- UIView *view5 = [JJHeaders createHeaderView:140
- images:imageArray];
- view5.center = CGPointMake(235, 390);
- view5.backgroundColor = [UIColor colorWithRed:230/255.0 green:230/255.0 blue:230/255.0 alpha:1.0];
-
-
- CGSize s = view5.bounds.size;
- // 下面方法,第一个参数表示区域大小。第二个参数表示是否是非透明的。如果需要显示半透明效果,需要传NO,否则传YES。第三个参数就是屏幕密度了
- UIGraphicsBeginImageContextWithOptions(s, YES, 1.0);
- [view5.layer renderInContext:UIGraphicsGetCurrentContext()];
- UIImage*image = UIGraphicsGetImageFromCurrentImageContext();
- UIGraphicsEndImageContext();
- return image;
-
- //// CGFloat width = 25;
- //// CGFloat height = 25;
- //// CGSize offScreenSize = CGSizeMake(width, height);
- ////
- //
- // CGSize headSize = CGSizeMake(100, 100);
- // UIGraphicsBeginImageContext(headSize);
- //
- // CGContextRef context = UIGraphicsGetCurrentContext();
- //
- //
- //
- //
- ////
- //// CGRect rect = CGRectMake(0, 0, width/2, height);
- //// [leftImage drawInRect:rect];
- ////
- //// rect.origin.x += width/2;
- //// [rightImage drawInRect:rect];
- ////
- //// UIImage* imagez = UIGraphicsGetImageFromCurrentImageContext();
- ////
- //// UIGraphicsEndImageContext();
- ////
- //// return imagez;
- // //获得当前画板
- //// CGContextRef context = UIGraphicsGetCurrentContext();
- //// UIColor *aColor = [UIColor colorWithRed:1 green:0.0 blue:0 alpha:1];
- ////
- //// CGContextSetFillColorWithColor(context, aColor.CGColor);//填充颜色
- ////
- //// CGContextSetLineWidth(context, 3.0);//线的宽度
- ////
- //// CGContextAddArc(context, 250, 40, 40, 0, 2 * M_PI, 0); //添加一个圆
- //// //kCGPathFill填充非零绕数规则,kCGPathEOFill表示用奇偶规则,kCGPathStroke路径,kCGPathFillStroke路径填充,kCGPathEOFillStroke表示描线,不是填充
- ////
- //// CGContextDrawPath(context, kCGPathFillStroke); //绘制路径加填充
- //
- // UIImage * sssImage = UIGraphicsGetImageFromCurrentImageContext();
- // UIGraphicsEndImageContext();
- // return [UIImage imageNamed:@""];
- }
- -(void)dealloc{
- // NSLog(@"roomData.dealloc");
- [_members removeAllObjects];
- // [members release];
- //
- // [super dealloc];
- }
- -(NSString *)roomDataToNSString{
-
- SBJsonWriter * OderJsonwriter = [SBJsonWriter new];
- NSString * jsonString = [OderJsonwriter stringWithObject:[self toDictionary]];
- // [OderJsonwriter release];
- return jsonString;
- }
- -(NSDictionary*)toDictionary{
- NSMutableDictionary * dict = [[NSMutableDictionary alloc]init];
-
- [dict setValue:self.roomJid forKey:@"jid"];
- [dict setValue:self.name forKey:@"name"];
- [dict setValue:self.desc forKey:@"desc"];
- [dict setValue:self.roomId forKey:@"id"];
- [dict setValue:[NSNumber numberWithLong:self.userId] forKey:@"userId"];
-
- return dict;
- }
- -(void)getDataFromDict:(NSDictionary*)dict{
-
-
- self.countryId = [[dict objectForKey:@"countryId"] intValue];
- self.provinceId = [[dict objectForKey:@"provinceId"] intValue];
- self.cityId = [[dict objectForKey:@"cityId"] intValue];
- self.areaId = [[dict objectForKey:@"areaId"] intValue];
- self.maxCount = [[dict objectForKey:@"maxUserSize"] intValue];
-
- self.longitude = [[dict objectForKey:@"longitude"] longValue];
- self.latitude = [[dict objectForKey:@"latitude"] longValue];
- self.name = [dict objectForKey:@"name"];
- self.desc = [dict objectForKey:@"desc"];
- self.showRead = [[dict objectForKey:@"showRead"] boolValue];
- self.category = [[dict objectForKey:@"category"] intValue];
- self.maxCount = [[dict objectForKey:@"maxUserSize"] intValue];
- self.curCount = [[dict objectForKey:@"userSize"] intValue];
- self.createTime = [[dict objectForKey:@"createTime"] longLongValue];
- self.updateTime = [[dict objectForKey:@"updateTime"] longLongValue];
- self.updateTime = [[dict objectForKey:@"updateTime"] longLongValue];
- self.updateTime = [[dict objectForKey:@"updateTime"] longLongValue];
-
-
-
- self.isLook = [[dict objectForKey:@"isLook"] boolValue];
- self.isNeedVerify = [[dict objectForKey:@"isNeedVerify"] boolValue];
- self.showMember = [[dict objectForKey:@"showMember"] boolValue];
- self.allowSendCard = [[dict objectForKey:@"allowSendCard"] boolValue];
- self.allowInviteFriend = [[dict objectForKey:@"allowInviteFriend"] boolValue];
- self.allowUploadFile = [[dict objectForKey:@"allowUploadFile"] boolValue];
- self.allowConference = [[dict objectForKey:@"allowConference"] boolValue];
- self.allowSpeakCourse = [[dict objectForKey:@"allowSpeakCourse"] boolValue];
- self.offlineNoPushMsg = [[(NSDictionary *)[dict objectForKey:@"member"] objectForKey:@"offlineNoPushMsg"] boolValue];
- self.isNeedVerify = [[dict objectForKey:@"isNeedVerify"] boolValue];
- self.allowHostUpdate = [[dict objectForKey:@"allowHostUpdate"] boolValue];
- self.isAttritionNotice = [[dict objectForKey:@"isAttritionNotice"] boolValue];
- self.isAttritionRecall = [[dict objectForKey:@"isAttritionRecall"] boolValue];
- self.isOpenIntegral = [[dict objectForKey:@"isOpenIntegral"] boolValue];
-
- self.chatRecordTimeOut = [NSString stringWithFormat:@"%@", [dict objectForKey:@"chatRecordTimeOut"]];
- self.talkTime = [[dict objectForKey:@"talkTime"] longLongValue];
- self.isSecretGroup = [[dict objectForKey:@"isSecretGroup"] boolValue];
- NSString * userIdStr = [NSString stringWithFormat:@"%@",[dict objectForKey:@"userId"]];
- NSRegularExpression*tLetterRegularExpression = [NSRegularExpression regularExpressionWithPattern:@"[A-Za-z]"options:NSRegularExpressionCaseInsensitive error:nil];
- NSUInteger letterMatchCount = [tLetterRegularExpression numberOfMatchesInString:userIdStr options:NSMatchingReportProgress range:NSMakeRange(0, userIdStr.length)];
-
- if(letterMatchCount == 0){
- self.userId = [[NSNumber numberWithLongLong:[userIdStr longLongValue]] longValue];
- }
- if (![dict objectForKey:@"id"]) {
- self.roomId = [dict objectForKey:@"roomId"];
- }else{
- self.roomId = [dict objectForKey:@"id"];
- }
- self.roomJid = [dict objectForKey:@"jid"];
- self.subject = [dict objectForKey:@"subject"];
- self.note = [(NSDictionary *)[dict objectForKey:@"notice"] objectForKey:@"text"];
- self.userNickName = [dict objectForKey:@"nickname"];
- self.lordRemarkName = [dict objectForKey:@"remarkName"];
-
- self.groupType = [dict objectForKey:@"groupType"];
- // self.call = [dict objectForKey:@"call"];
-
- if([self.note length]<=0)
- self.note = Localized(@"JX_NotAch");
-
- _tableName = self.roomId;
-
- [_members removeAllObjects];
- NSArray* array = [dict objectForKey:@"members"];
- NSMutableArray *arr = [NSMutableArray array];
- for(int i=0;i<[array count];i++){
- NSDictionary* p = [array objectAtIndex:i];
- memberData* option = [[memberData alloc] init];
- [option getDataFromDict:p]; //修改了
- option.roomId = self.roomId;
- // [option insert];
- p = nil;
- [arr addObject:option];
- }
-
- [self insertArray:arr withTransaction:YES];
-
- self.members = arr;
-
- self.curCount = [_members count];
- array = nil;
- }
- -(BOOL)checkTableCreatedInDb:(NSString *)queryRoomId{
- NSString* myUserId = MY_USER_ID;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
-
- NSString *createStr=[NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS 'member_%@' ('userId' INTEGER PRIMARY KEY NOT NULL UNIQUE , 'roomId' VARCHAR, 'userName' VARCHAR, 'cardName' VARCHAR, 'role' INTEGER, 'createTime' VARCHAR, 'remarkName' VARCHAR)",queryRoomId];
- // NSString *createStr=[NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS 'member_%@' (id integer PRIMARY KEY AUTOINCREMENT,'userId' INTEGER PRIMARY KEY , 'roomId' VARCHAR, 'userName' VARCHAR, 'cardName' VARCHAR, 'role' INTEGER, 'createTime' VARCHAR, 'remarkName' VARCHAR)",queryRoomId];
-
- BOOL worked = [db executeUpdate:createStr];
- return worked;
- }
- -(BOOL)checkTableChatViewCreatedInDb:(NSString *)queryRoomId{
- NSString* myUserId = MY_USER_ID;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
-
- NSString *createStr=[NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS 'member_%@' ('userId' INTEGER PRIMARY KEY NOT NULL UNIQUE , 'roomId' VARCHAR, 'userName' VARCHAR, 'cardName' VARCHAR, 'role' INTEGER, 'createTime' VARCHAR, 'remarkName' VARCHAR)",queryRoomId];
- // NSString *createStr=[NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS 'member_%@' (id integer PRIMARY KEY AUTOINCREMENT,'userId' INTEGER PRIMARY KEY , 'roomId' VARCHAR, 'userName' VARCHAR, 'cardName' VARCHAR, 'role' INTEGER, 'createTime' VARCHAR, 'remarkName' VARCHAR)",queryRoomId];
-
- BOOL worked = [db executeUpdate:createStr];
- return worked;
-
- }
- - (void)insertArray:(NSArray *)dataArray withTransaction:(BOOL)useTransaction{
- if (!self.userId) {
- return;
- }
- NSString* myUserId = MY_USER_ID;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- [self checkTableCreatedInDb:self.roomId];
- if (useTransaction) {
- [db beginTransaction];
- BOOL isRollBack = NO;
- @try {
- for (NSInteger i = 0; i < dataArray.count; i++) {
- //修改了增加了 查询
- memberData *memberData = dataArray[i];
- // NSString * sqlSelect = [NSString stringWithFormat:@"select * from member_%@ where userId = %ld",memberData.roomId,memberData.userId];
- // FMResultSet *rsSelect = [db executeQuery:sqlSelect];
- //
- // if (rsSelect.next) {
- //
- // return;
- // }
-
- NSString *insertStr=[NSString stringWithFormat:@"INSERT INTO member_%@ (roomId,userId,userName,cardName,role,createTime,remarkName) VALUES (?,?,?,?,?,?,?)",memberData.roomId];
- BOOL worked = [db executeUpdate:insertStr,memberData.roomId,[NSNumber numberWithLong:memberData.userId],memberData.userNickName,memberData.userNickName,memberData.role,[NSNumber numberWithLongLong:memberData.createTime],memberData.lordRemarkName];
- if (!worked) {
- [self updateMember:memberData withDataBase:db];
- }
- }
- } @catch (NSException *exception) {
- isRollBack = YES;
- [db rollback];
- } @finally {
- if (!isRollBack) {
- [db commit];
- [db close];
- }else{
- [db close];
- [self insertArray:dataArray withTransaction:NO];
- }
- }
-
- }else{
- for (NSInteger i = 0; i < dataArray.count; i++) {
- memberData *memberData = dataArray[i];
- NSString *insertStr=[NSString stringWithFormat:@"INSERT INTO member_%@ (roomId,userId,userName,cardName,role,createTime,remarkName) VALUES (?,?,?,?,?,?,?)",memberData.roomId];
- BOOL worked = [db executeUpdate:insertStr,memberData.roomId,[NSNumber numberWithLong:memberData.userId],memberData.userNickName,memberData.userNickName,memberData.role,[NSNumber numberWithLongLong:memberData.createTime],memberData.lordRemarkName];
- if (!worked) {
- [self updateMember:memberData withDataBase:db];
- }
- }
- [db close];
- }
- }
- - (BOOL)updateMember:(memberData *)member withDataBase:(FMDatabase *)db{
- NSString* sql = [NSString stringWithFormat:@"update member_%@ set roomId=?,userId=?,userName=?,cardName=?,role=?,createTime=?,remarkName=? where userId=?",member.roomId];
- BOOL worked = [db executeUpdate:sql,member.roomId,[NSNumber numberWithLong:member.userId],member.userNickName,member.cardName,member.role,[NSNumber numberWithLongLong:member.createTime],member.lordRemarkName,[NSNumber numberWithLong:member.userId]];
- return worked;
- }
- -(void)setMembers:(NSMutableArray *)members{
- _tableName = self.roomId;
-
- [_members removeAllObjects];
- // NSArray* array = [dict objectForKey:@"members"];
-
- if ([[members firstObject] isMemberOfClass:[memberData class]]) {
- _members = members;
- }else{
- for(int i=0;i<[members count];i++){
- NSDictionary* p = [members objectAtIndex:i];
- memberData* option = [[memberData alloc] init];
- [option getDataFromDict:p];
- option.roomId = self.roomId;
- [option insert];
- p = nil;
-
- [_members addObject:option];
- }
- }
- // [self roomHeadImageToView:nil];
- }
- -(BOOL)isMember:(NSString*)theUserId{
- for(int i=0;i<[_members count];i++){
- memberData* p = [_members objectAtIndex:i];
- if([theUserId intValue] == p.userId)
- return YES;
- }
- return NO;
- }
- -(memberData*)getMember:(NSString*)theUserId{
- for(int i=0;i<[_members count];i++){
- memberData* p = [_members objectAtIndex:i];
- if([theUserId intValue] == p.userId)
- return p;
- }
- return nil;
- }
- -(NSString*)getNickNameInRoom{
- for(int i=0;i<[_members count];i++){
- memberData* p = [_members objectAtIndex:i];
- if([g_myself.userId intValue] == p.userId)
- return p.userNickName;
- }
- return g_myself.userNickname;
- }
- -(NSInteger)getCurCount{
- return [_members count];
- }
- -(void)setNickNameForUser:(JXUserObject*)user{
- for (int i=0; i<[_members count]; i++) {
- memberData* p = [_members objectAtIndex:i];
- if([user.userId intValue] == p.userId){
- user.userNickname = p.userNickName;
- break;
- }
- }
- }
- @end
- @implementation memberData
- @synthesize active;
- @synthesize talkTime;
- @synthesize role;
- @synthesize createTime;
- @synthesize updateTime;
- @synthesize sub;
- @synthesize userId;
- @synthesize userNickName;
- @synthesize onlinestate;
- @synthesize grade;
- -(id)init{
- self = [super init];
- return self;
- }
- -(void)dealloc{
- // NSLog(@"memberData.dealloc");
- // [super dealloc];
- }
- -(void)getDataFromDict:(NSDictionary*)dict{
- //self.roomId = [dict objectForKey:@"roomId"];
- self.userId = [[dict objectForKey:@"userId"] longValue];
- self.userNickName = [dict objectForKey:@"nickname"];
- self.lordRemarkName = [dict objectForKey:@"remarkName"];
- self.sub = [[dict objectForKey:@"sub"] intValue];
- self.role = [NSNumber numberWithInt:[[dict objectForKey:@"role"] intValue]];
- self.talkTime = [[dict objectForKey:@"talkTime"] longLongValue];
- self.active = [[dict objectForKey:@"active"] longLongValue];
- self.createTime = [[dict objectForKey:@"createTime"] longLongValue];
- self.updateTime = [[dict objectForKey:@"updateTime"] longLongValue];
- self.offlineNoPushMsg = [[dict objectForKey:@"offlineNoPushMsg"] intValue];
- self.onlinestate = [NSString stringWithFormat:@"%@",[dict objectForKey:@"onlinestate"]];
- self.grade = [NSNumber numberWithInt:[[dict objectForKey:@"grade"] intValue]];
- self.bubbleFontId = [NSString stringWithFormat:@"%@",[dict objectForKey:@"bubbleFontId"]];
- self.gradeIndex = [NSString stringWithFormat:@"%@",[dict objectForKey:@"gradeIndex"]];
- self.gradeIndex = [NSString stringWithFormat:@"%@",[dict objectForKey:@"gradeIndex"]];
- // self.roomId;
- // self.userId;
- // self.userName;
- // self.cardName;
- // self.isAdmin;
-
- }
- #pragma mark -数据库
- -(BOOL)checkTableChatViewCreatedInDb:(NSString *)queryRoomId{
-
- NSString* myUserId = MY_USER_ID;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- NSString *createStr=[NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS 'member_%@' ('userId' INTEGER PRIMARY KEY NOT NULL UNIQUE , 'roomId' VARCHAR, 'userName' VARCHAR, 'cardName' VARCHAR, 'role' INTEGER,'onlinestate' VARCHAR, 'grade' INTEGER, 'createTime' VARCHAR, 'remarkName' VARCHAR, 'bubbleFontId' VARCHAR, 'gradeIndex' VARCHAR)",queryRoomId];
-
-
- // NSString *createStr=[NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS 'member_%@' (id integer PRIMARY KEY AUTOINCREMENT,'userId', 'roomId' VARCHAR, 'userName' VARCHAR, 'cardName' VARCHAR, 'role' INTEGER,'onlinestate' VARCHAR, 'grade' INTEGER, 'createTime' VARCHAR, 'remarkName' VARCHAR, 'bubbleFontId' VARCHAR, 'gradeIndex' VARCHAR)",queryRoomId];
-
- BOOL worked = [db executeUpdate:createStr];
- return worked;
-
- }
- #pragma mark -数据库
- -(BOOL)checkTableCreatedInDb:(NSString *)queryRoomId{
- NSString* myUserId = MY_USER_ID;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- NSString *createStr=[NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS 'member_%@' ('userId' INTEGER PRIMARY KEY NOT NULL UNIQUE , 'roomId' VARCHAR, 'userName' VARCHAR, 'cardName' VARCHAR, 'role' INTEGER,'onlinestate' VARCHAR, 'grade' INTEGER, 'createTime' VARCHAR, 'remarkName' VARCHAR, 'bubbleFontId' VARCHAR, 'gradeIndex' VARCHAR)",queryRoomId];
-
-
- // NSString *createStr=[NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS 'member_%@' (, 'roomId' VARCHAR,'userId', 'userName' VARCHAR, 'cardName' VARCHAR, 'role' INTEGER,'onlinestate' VARCHAR, 'grade' INTEGER, 'createTime' VARCHAR, 'remarkName' VARCHAR, 'bubbleFontId' VARCHAR, 'gradeIndex' VARCHAR)",queryRoomId];
-
- BOOL worked = [db executeUpdate:createStr];
- return worked;
- }
- +(NSArray <memberData *>*)getSelfMember:(NSString *)queryRoomId{
- NSString* sql = [NSString stringWithFormat:@"select * from member_%@",queryRoomId];
- return [[[memberData alloc] init] doFetch:sql roomId:queryRoomId];
- }
- /*2.创表
- NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"];
- // 1.创建数据库队列
- FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:filename];
- [queue inDatabase:^(FMDatabase *db) {
- NSString *insertStr=[NSString stringWithFormat:@"INSERT INTO member_%@ (roomId,userId,userName,cardName,role,onlinestate,grade,createTime,remarkName,bubbleFontId,gradeIndex) VALUES (?,?,?,?,?,?,?,?,?,?,?)",_roomId];
-
-
-
- BOOL result = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS 'member_222%@' ('userId' INTEGER PRIMARY KEY NOT NULL UNIQUE , 'roomId' VARCHAR, 'userName' VARCHAR, 'cardName' VARCHAR, 'role' INTEGER,'onlinestate' VARCHAR, 'grade' INTEGER, 'createTime' VARCHAR, 'remarkName' VARCHAR, 'bubbleFontId' VARCHAR, 'gradeIndex' VARCHAR)",_roomId];
-
- if (result) {
- NSLog(@"创表成功");
- } else {
- NSLog(@"创表失败");
- }
- }];
- [queue inDatabase:^(FMDatabase *db) {
- for (int i = 0; i<440; i++) {
- NSString *name = [NSString stringWithFormat:@"rose-%d", arc4random() % 1000];
- NSNumber *age = @(arc4random() % 100 + 1);
- NSNumber *sex = @(33);
- NSString *heightUser = @"身高";
- NSString *weightUser = @"体重";
- NSString *pangUser = @"胖胖";
- [db executeUpdate:@"insert into t_student (name, age,sex,heightUser,weightUser,pangUser) values (?, ?,?,?,?,?);", name, age,sex,heightUser,weightUser,pangUser];
- }
- }];
- */
- -(BOOL)insertChatView{
- if (!self.userId) {
- return NO;
- }
- NSString* myUserId = MY_USER_ID;
-
-
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- // 0.获得沙盒中的数据库文件名
-
- if([self.role integerValue] == 0){
- self.role = [NSNumber numberWithInteger:3];
- }
- //'userId' INTEGER PRIMARY KEY NOT NULL UNIQUE , 'roomId' VARCHAR,
- NSString *insertStr=[NSString stringWithFormat:@"INSERT INTO member_%@ (roomId,userId,userName,cardName,role,onlinestate,grade,createTime,remarkName,bubbleFontId,gradeIndex) VALUES (?,?,?,?,?,?,?,?,?,?,?)",_roomId];
- BOOL worked = [db executeUpdate:insertStr,_roomId,[NSNumber numberWithLong:userId],userNickName,userNickName,self.role,self.onlinestate,self.grade,[NSNumber numberWithLongLong:self.createTime],self.lordRemarkName,self.bubbleFontId,self.gradeIndex];
-
-
-
- if (!worked) {
- [self update];
- }
- db = nil;
- return worked;
-
- }
- -(BOOL)insert{
- if (!self.userId) {
- return NO;
- }
- NSString* myUserId = MY_USER_ID;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- [self checkTableCreatedInDb:self.roomId];
-
-
- if([self.role integerValue] == 0){
- self.role = [NSNumber numberWithInteger:3];
- }
- NSString *insertStr=[NSString stringWithFormat:@"INSERT INTO member_%@ (roomId,userId,userName,cardName,role,onlinestate,grade,createTime,remarkName,bubbleFontId,gradeIndex) VALUES (?,?,?,?,?,?,?,?,?,?,?)",_roomId];
- BOOL worked = [db executeUpdate:insertStr,_roomId,[NSNumber numberWithLong:userId],self.userNickName,self.userNickName,self.role,self.onlinestate,self.grade,[NSNumber numberWithLongLong:self.createTime],self.lordRemarkName,self.bubbleFontId,self.gradeIndex];
- if (!worked) {
- [self update];
- }
- db = nil;
- return worked;
-
-
- }
- -(BOOL)update{
- NSString* myUserId = MY_USER_ID;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- [self checkTableCreatedInDb:self.roomId];
-
- // NSLog(@"_roomId::: 2%@ --%ld",_roomId,userId);
- NSString* sql = [NSString stringWithFormat:@"update member_%@ set roomId=?,userId=?,userName=?,cardName=?,role=?,onlinestate=?,grade=?,createTime=?,remarkName=?,bubbleFontId=?,gradeIndex=? where userId=?",self.roomId];
- BOOL worked = [db executeUpdate:sql,self.roomId,[NSNumber numberWithLong:self.userId],self.userNickName,self.cardName,self.role,self.onlinestate,self.grade,[NSNumber numberWithLongLong:self.createTime],self.lordRemarkName,self.bubbleFontId,self.gradeIndex,[NSNumber numberWithLong:self.userId]];
- return worked;
- }
- -(BOOL)remove{
- NSString* myUserId = MY_USER_ID;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- [self checkTableCreatedInDb:self.roomId];
-
- BOOL worked=[db executeUpdate:[NSString stringWithFormat:@"delete from member_%@ where userId=?",self.roomId],[NSNumber numberWithLong:self.userId]];
- return worked;
- }
- //删除房间成员列表
- -(BOOL)deleteRoomMemeber{
- NSString* myUserId = MY_USER_ID;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- [self checkTableCreatedInDb:self.roomId];
-
- BOOL worked=[db executeUpdate:[NSString stringWithFormat:@"delete from member_%@",self.roomId]];
- return worked;
- }
- +(NSArray <memberData *>*)fetchAllMembers:(NSString *)queryRoomId{
- NSString* sql = [NSString stringWithFormat:@"select * from member_%@",queryRoomId];
- return [[[memberData alloc] init] doFetch:sql roomId:queryRoomId];
- }
- +(NSArray <memberData *>*)fetchAllMembers:(NSString *)queryRoomId sortByName:(BOOL)sortByName{
- NSString* sql;
- if (sortByName){//群@,名字排序
- sql = [NSString stringWithFormat:@"select * from member_%@ where userId != '%@' order by cardName",queryRoomId,MY_USER_ID];
- }else{//群成员,身份+加入时间
- sql = [NSString stringWithFormat:@"select * from member_%@ order by role,createTime",queryRoomId];
- }
- return [[[memberData alloc] init] doFetch:sql roomId:queryRoomId];
- }
- +(NSArray <memberData *>*)fetchAllMembersAndHideMonitor:(NSString *)queryRoomId sortByName:(BOOL)sortByName{
- NSString* sql;
- if (sortByName){//群@,名字排序
- sql = [NSString stringWithFormat:@"select * from member_%@ where (userId != '%@' and role != 4 and role!=5) order by cardName",queryRoomId,MY_USER_ID];
- }else{//群成员,身份+加入时间
- sql = [NSString stringWithFormat:@"select * from member_%@ where ((role != 4 and role!=5) or userId == '%@') order by role,createTime",queryRoomId,MY_USER_ID];
- }
- return [[[memberData alloc] init] doFetch:sql roomId:queryRoomId];
- }
- -(memberData *)searchMemberByName:(NSString *)cardName{
- NSString* sql = [NSString stringWithFormat:@"select * from member_%@ where cardName=%@",self.roomId,cardName];
- NSMutableArray* rmArray = [self doFetch:sql roomId:self.roomId];
- return (rmArray.count ? [rmArray firstObject] : nil);
- }
- -(memberData*)getCardNameById:(NSString*)aUserId {
- NSString* sql = [NSString stringWithFormat:@"select * from member_%@ where userId=%@",self.roomId,aUserId];
- NSMutableArray* rmArray = [self doFetch:sql roomId:self.roomId];
- return (rmArray.count ? [rmArray firstObject] : nil);
- }
- // 查找群主
- + (memberData *)searchGroupOwner:(NSString *)roomId {
- NSString* sql = [NSString stringWithFormat:@"select * from member_%@ where role=1",roomId];
- NSMutableArray* rmArray = [[[memberData alloc] init] doFetch:sql roomId:roomId];
- return (rmArray.count ? [rmArray firstObject] : nil);
- }
- // 更新身份
- - (BOOL)updateRole {
- NSString* myUserId = MY_USER_ID;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- [self checkTableCreatedInDb:self.roomId];
-
- NSString* sql = [NSString stringWithFormat:@"update member_%@ set role=? where userId=?",self.roomId];
- BOOL worked = [db executeUpdate:sql,self.role,[NSNumber numberWithLong:self.userId]];
- return worked;
- }
- // 更新其他人身份
- - (BOOL)updateRoleByUserId:(long)userId role:(NSNumber *)role {
- NSString* myUserId = MY_USER_ID;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- [self checkTableCreatedInDb:self.roomId];
-
- NSString* sql = [NSString stringWithFormat:@"update member_%@ set role=? where userId=?",self.roomId];
- BOOL worked = [db executeUpdate:sql,role,[NSNumber numberWithLong:userId]];
- return worked;
- }
- - (BOOL)updateCardName {
- NSString* myUserId = MY_USER_ID;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- [self checkTableCreatedInDb:self.roomId];
-
- NSString* sql = [NSString stringWithFormat:@"update member_%@ set cardName=? where userId=?",self.roomId];
- BOOL worked = [db executeUpdate:sql,self.cardName,[NSNumber numberWithLong:self.userId]];
- return worked;
- }
- // 更新群昵称
- - (BOOL)updateUserNickName {
- NSString* myUserId = MY_USER_ID;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- [self checkTableCreatedInDb:self.roomId];
-
- NSString* sql = [NSString stringWithFormat:@"update member_%@ set userName=? where userId=?",self.roomId];
- BOOL worked = [db executeUpdate:sql,self.userNickName,[NSNumber numberWithLong:self.userId]];
- return worked;
- }
- - (BOOL)updateOnlinestate{
- NSString* myUserId = MY_USER_ID;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- [self checkTableCreatedInDb:self.roomId];
-
- NSString* sql = [NSString stringWithFormat:@"update member_%@ set onlinestate=? where userId=?",self.roomId];
- BOOL worked = [db executeUpdate:sql,self.onlinestate,[NSNumber numberWithLong:self.userId]];
- return worked;
- }
- +(NSMutableArray *)searchMemberByFilter:(NSString *)filter room:(NSString *)roomId{
- NSString * sql = [NSString stringWithFormat:@"select * from member_%@ where (userName like '%%%@%%' or cardName like '%%%@%%')",roomId,filter,filter];
- NSMutableArray* rmArray = [[[memberData alloc] init] doFetch:sql roomId:roomId];
- return rmArray;
- }
- -(NSMutableArray*)doFetch:(NSString*)sql roomId:(NSString *)queryRoomId
- {
- NSMutableArray *resultArr=[[NSMutableArray alloc]init];
-
- NSString* myUserId = MY_USER_ID;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- [self checkTableCreatedInDb:queryRoomId];
-
- FMResultSet *rs=[db executeQuery:sql];
- while ([rs next]) {
- memberData * mem = [[memberData alloc] init];
- mem.userId = [[rs objectForColumnName:@"userId"] longValue];
- mem.roomId = [rs stringForColumn:@"roomId"];
- mem.userNickName = [rs stringForColumn:@"userName"];
- mem.lordRemarkName = [rs stringForColumn:@"remarkName"];
- mem.cardName = [rs stringForColumn:@"cardName"];
- mem.role = [rs objectForColumnName:@"role"];
- mem.createTime = [[rs objectForColumnName:@"createTime"] longLongValue];
- mem.onlinestate = [rs objectForColumnName:@"onlinestate"];
- mem.grade = [rs objectForColumnName:@"grade"];
- mem.bubbleFontId = [rs stringForColumn:@"bubbleFontId"];
- mem.gradeIndex = [rs stringForColumn:@"gradeIndex"];
- [resultArr addObject:mem];
- }
- [rs close];
- if([resultArr count]==0){
- resultArr = nil;
- }
- return resultArr;
- }
- + (memberData *)fetchMembersWithText:(NSString *)text withRoomId:(NSString *)roomId{
- NSString *sql = [NSString stringWithFormat:@"select * from member_%@ where userName like '%%%@%%'",roomId,text];
- return [[[memberData alloc] init] doFetchOneMember:sql roomId:roomId];
- }
- - (memberData *)doFetchOneMember:(NSString*)sql roomId:(NSString *)roomId
- {
- memberData *member = [[memberData alloc] init];
- NSString* myUserId = MY_USER_ID;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- [self checkTableCreatedInDb:roomId];
-
- FMResultSet *rs=[db executeQuery:sql];
- while ([rs next]) {
- memberData * mem = [[memberData alloc] init];
- mem.userId = [[rs objectForColumnName:@"userId"] longValue];
- mem.roomId = [rs stringForColumn:@"roomId"];
- mem.userNickName = [rs stringForColumn:@"userName"];
- mem.lordRemarkName = [rs stringForColumn:@"remarkName"];
- mem.cardName = [rs stringForColumn:@"cardName"];
- mem.role = [rs objectForColumnName:@"role"];
- mem.createTime = [[rs objectForColumnName:@"createTime"] longLongValue];
- member = mem;
- break;
- }
- [rs close];
- if (!member.userNickName) {
- return nil;
- }
- return member;
- }
- @end
|