roomData.m 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736
  1. //
  2. // roomData.m
  3. // shiku_im
  4. //
  5. // Created by flyeagleTang on 15-2-6.
  6. // Copyright (c) 2015年 Reese. All rights reserved.
  7. //
  8. #import "roomData.h"
  9. #import "FMDatabase.h"
  10. #import "FMResultSet.h"
  11. #import "SDWebImageManager.h"
  12. #import <UIKit/UIKit.h>
  13. #import "QQHeader.h"
  14. @implementation roomData
  15. @synthesize countryId;//国家
  16. @synthesize provinceId;//省份
  17. @synthesize cityId;//城市
  18. @synthesize areaId;//区域
  19. @synthesize name;//名字
  20. @synthesize desc;//名字
  21. @synthesize longitude;
  22. @synthesize latitude;
  23. @synthesize category;
  24. @synthesize maxCount;
  25. @synthesize curCount;
  26. @synthesize createTime;
  27. @synthesize updateTime;
  28. @synthesize updateUserId;
  29. @synthesize roomId;
  30. @synthesize subject;
  31. @synthesize userId;
  32. @synthesize userNickName;
  33. //@synthesize members;
  34. @synthesize note;
  35. @synthesize roomJid;
  36. -(id)init{
  37. self = [super init];
  38. _members = [[NSMutableArray alloc]init];
  39. return self;
  40. }
  41. +(void)roomHeadImageRoomId:(NSString *)roomId toView:(UIImageView *)toView{
  42. roomData * room = [[roomData alloc]init];
  43. room.roomId = roomId;
  44. // [room roomHeadImageToView:toView];
  45. }
  46. -(void)roomHeadImageToView:(UIImageView *)toView{
  47. //获取全部
  48. NSArray * allMem = [memberData fetchAllMembers:self.roomId];
  49. if (toView){
  50. toView.image = [UIImage imageNamed:@"groupImage"];//先设置一张默认群组图片
  51. }
  52. if(!allMem || allMem.count <= 1){
  53. return;//数据库没有值
  54. }
  55. NSMutableArray * userIdArr = [[NSMutableArray alloc] init];
  56. NSMutableArray * downLoadImageArr = [[NSMutableArray alloc] init];
  57. __block int finishCount = 0;
  58. NSString * roomIdStr = [self.roomJid mutableCopy];
  59. if (roomIdStr.length <= 0) {
  60. return;
  61. }
  62. dispatch_async(dispatch_get_global_queue(0, 0), ^{
  63. //webcache
  64. SDWebImageManager * manager = [SDWebImageManager sharedManager];
  65. for (int i = 0; (i<allMem.count) && (i<10); i++) {
  66. memberData * member = allMem[i];
  67. //取userId
  68. long longUserId = member.userId;
  69. if (longUserId >= 10000000){
  70. [userIdArr addObject:[NSNumber numberWithLong:longUserId]];
  71. }
  72. if(userIdArr.count >= 5)
  73. break;
  74. }
  75. for (NSNumber * userIdNum in userIdArr) {
  76. NSString* dir = [NSString stringWithFormat:@"%ld",[userIdNum longValue] % 10000];
  77. NSString* url = [NSString stringWithFormat:@"%@avatar/t/%@/%@.jpg",g_config.downloadAvatarUrl,dir,userIdNum];
  78. [manager loadImageWithURL:[NSURL URLWithString:url] options:SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
  79. } completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) {
  80. finishCount++;
  81. if(image){
  82. [downLoadImageArr addObject:image];
  83. }
  84. if(error){
  85. }
  86. if (downLoadImageArr.count >= 5 || finishCount >= userIdArr.count){
  87. if (downLoadImageArr.count <userIdArr.count){
  88. UIImage * defaultImage = [UIImage imageNamed:@"userhead"];
  89. for (int i=(int)downLoadImageArr.count; i<userIdArr.count; i++) {
  90. [downLoadImageArr addObject:defaultImage];
  91. }
  92. }
  93. //生成群头像
  94. UIImage * drawimage = [self combineImage:downLoadImageArr];
  95. dispatch_async(dispatch_get_main_queue(), ^{
  96. NSDictionary * groupDict = @{@"groupHeadImage":drawimage,@"roomJid":roomIdStr};
  97. [g_notify postNotificationName:kGroupHeadImageModifyNotifaction object:groupDict];
  98. if (toView) {
  99. toView.image = drawimage;
  100. }
  101. NSString *groupImagePath = [NSString stringWithFormat:@"%@%@/%@.%@",NSTemporaryDirectory(),g_myself.userId,roomIdStr,@"jpg"];
  102. if (groupImagePath && [[NSFileManager defaultManager] fileExistsAtPath:groupImagePath]) {
  103. NSError * error = nil;
  104. [[NSFileManager defaultManager] removeItemAtPath:groupImagePath error:&error];
  105. if (error)
  106. NSLog(@"删除文件错误:%@",error);
  107. }
  108. [g_server saveImageToFile:drawimage file:groupImagePath isOriginal:NO];
  109. // g_notify postNotificationName:<#(nonnull NSNotificationName)#> object:<#(nullable id)#>
  110. return ;
  111. });
  112. }
  113. }];
  114. // [manager downloadImageWithURL:[NSURL URLWithString:url] options:SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize) {
  115. //
  116. // } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
  117. //
  118. // }];
  119. }
  120. });
  121. }
  122. - (UIImage *)combineImage:(NSArray *)imageArray {
  123. UIView *view5 = [JJHeaders createHeaderView:140
  124. images:imageArray];
  125. view5.center = CGPointMake(235, 390);
  126. view5.backgroundColor = [UIColor colorWithRed:230/255.0 green:230/255.0 blue:230/255.0 alpha:1.0];
  127. CGSize s = view5.bounds.size;
  128. // 下面方法,第一个参数表示区域大小。第二个参数表示是否是非透明的。如果需要显示半透明效果,需要传NO,否则传YES。第三个参数就是屏幕密度了
  129. UIGraphicsBeginImageContextWithOptions(s, YES, 1.0);
  130. [view5.layer renderInContext:UIGraphicsGetCurrentContext()];
  131. UIImage*image = UIGraphicsGetImageFromCurrentImageContext();
  132. UIGraphicsEndImageContext();
  133. return image;
  134. //// CGFloat width = 25;
  135. //// CGFloat height = 25;
  136. //// CGSize offScreenSize = CGSizeMake(width, height);
  137. ////
  138. //
  139. // CGSize headSize = CGSizeMake(100, 100);
  140. // UIGraphicsBeginImageContext(headSize);
  141. //
  142. // CGContextRef context = UIGraphicsGetCurrentContext();
  143. //
  144. //
  145. //
  146. //
  147. ////
  148. //// CGRect rect = CGRectMake(0, 0, width/2, height);
  149. //// [leftImage drawInRect:rect];
  150. ////
  151. //// rect.origin.x += width/2;
  152. //// [rightImage drawInRect:rect];
  153. ////
  154. //// UIImage* imagez = UIGraphicsGetImageFromCurrentImageContext();
  155. ////
  156. //// UIGraphicsEndImageContext();
  157. ////
  158. //// return imagez;
  159. // //获得当前画板
  160. //// CGContextRef context = UIGraphicsGetCurrentContext();
  161. //// UIColor *aColor = [UIColor colorWithRed:1 green:0.0 blue:0 alpha:1];
  162. ////
  163. //// CGContextSetFillColorWithColor(context, aColor.CGColor);//填充颜色
  164. ////
  165. //// CGContextSetLineWidth(context, 3.0);//线的宽度
  166. ////
  167. //// CGContextAddArc(context, 250, 40, 40, 0, 2 * M_PI, 0); //添加一个圆
  168. //// //kCGPathFill填充非零绕数规则,kCGPathEOFill表示用奇偶规则,kCGPathStroke路径,kCGPathFillStroke路径填充,kCGPathEOFillStroke表示描线,不是填充
  169. ////
  170. //// CGContextDrawPath(context, kCGPathFillStroke); //绘制路径加填充
  171. //
  172. // UIImage * sssImage = UIGraphicsGetImageFromCurrentImageContext();
  173. // UIGraphicsEndImageContext();
  174. // return [UIImage imageNamed:@""];
  175. }
  176. -(void)dealloc{
  177. // NSLog(@"roomData.dealloc");
  178. [_members removeAllObjects];
  179. // [members release];
  180. //
  181. // [super dealloc];
  182. }
  183. -(NSString *)roomDataToNSString{
  184. SBJsonWriter * OderJsonwriter = [SBJsonWriter new];
  185. NSString * jsonString = [OderJsonwriter stringWithObject:[self toDictionary]];
  186. // [OderJsonwriter release];
  187. return jsonString;
  188. }
  189. -(NSDictionary*)toDictionary{
  190. NSMutableDictionary * dict = [[NSMutableDictionary alloc]init];
  191. [dict setValue:self.roomJid forKey:@"jid"];
  192. [dict setValue:self.name forKey:@"name"];
  193. [dict setValue:self.desc forKey:@"desc"];
  194. [dict setValue:self.roomId forKey:@"id"];
  195. [dict setValue:[NSNumber numberWithLong:self.userId] forKey:@"userId"];
  196. return dict;
  197. }
  198. -(void)getDataFromDict:(NSDictionary*)dict{
  199. self.countryId = [[dict objectForKey:@"countryId"] intValue];
  200. self.provinceId = [[dict objectForKey:@"provinceId"] intValue];
  201. self.cityId = [[dict objectForKey:@"cityId"] intValue];
  202. self.areaId = [[dict objectForKey:@"areaId"] intValue];
  203. self.maxCount = [[dict objectForKey:@"maxUserSize"] intValue];
  204. self.longitude = [[dict objectForKey:@"longitude"] longValue];
  205. self.latitude = [[dict objectForKey:@"latitude"] longValue];
  206. self.name = [dict objectForKey:@"name"];
  207. self.desc = [dict objectForKey:@"desc"];
  208. self.showRead = [[dict objectForKey:@"showRead"] boolValue];
  209. self.category = [[dict objectForKey:@"category"] intValue];
  210. self.maxCount = [[dict objectForKey:@"maxUserSize"] intValue];
  211. self.curCount = [[dict objectForKey:@"userSize"] intValue];
  212. self.createTime = [[dict objectForKey:@"createTime"] longLongValue];
  213. self.updateTime = [[dict objectForKey:@"updateTime"] longLongValue];
  214. self.updateTime = [[dict objectForKey:@"updateTime"] longLongValue];
  215. self.updateTime = [[dict objectForKey:@"updateTime"] longLongValue];
  216. self.isLook = [[dict objectForKey:@"isLook"] boolValue];
  217. self.isNeedVerify = [[dict objectForKey:@"isNeedVerify"] boolValue];
  218. self.showMember = [[dict objectForKey:@"showMember"] boolValue];
  219. self.allowSendCard = [[dict objectForKey:@"allowSendCard"] boolValue];
  220. self.allowInviteFriend = [[dict objectForKey:@"allowInviteFriend"] boolValue];
  221. self.allowUploadFile = [[dict objectForKey:@"allowUploadFile"] boolValue];
  222. self.allowConference = [[dict objectForKey:@"allowConference"] boolValue];
  223. self.allowSpeakCourse = [[dict objectForKey:@"allowSpeakCourse"] boolValue];
  224. self.offlineNoPushMsg = [[(NSDictionary *)[dict objectForKey:@"member"] objectForKey:@"offlineNoPushMsg"] boolValue];
  225. self.isNeedVerify = [[dict objectForKey:@"isNeedVerify"] boolValue];
  226. self.allowHostUpdate = [[dict objectForKey:@"allowHostUpdate"] boolValue];
  227. self.isAttritionNotice = [[dict objectForKey:@"isAttritionNotice"] boolValue];
  228. self.isAttritionRecall = [[dict objectForKey:@"isAttritionRecall"] boolValue];
  229. self.isOpenIntegral = [[dict objectForKey:@"isOpenIntegral"] boolValue];
  230. self.chatRecordTimeOut = [NSString stringWithFormat:@"%@", [dict objectForKey:@"chatRecordTimeOut"]];
  231. self.talkTime = [[dict objectForKey:@"talkTime"] longLongValue];
  232. self.isSecretGroup = [[dict objectForKey:@"isSecretGroup"] boolValue];
  233. NSString * userIdStr = [NSString stringWithFormat:@"%@",[dict objectForKey:@"userId"]];
  234. NSRegularExpression*tLetterRegularExpression = [NSRegularExpression regularExpressionWithPattern:@"[A-Za-z]"options:NSRegularExpressionCaseInsensitive error:nil];
  235. NSUInteger letterMatchCount = [tLetterRegularExpression numberOfMatchesInString:userIdStr options:NSMatchingReportProgress range:NSMakeRange(0, userIdStr.length)];
  236. if(letterMatchCount == 0){
  237. self.userId = [[NSNumber numberWithLongLong:[userIdStr longLongValue]] longValue];
  238. }
  239. if (![dict objectForKey:@"id"]) {
  240. self.roomId = [dict objectForKey:@"roomId"];
  241. }else{
  242. self.roomId = [dict objectForKey:@"id"];
  243. }
  244. self.roomJid = [dict objectForKey:@"jid"];
  245. self.subject = [dict objectForKey:@"subject"];
  246. self.note = [(NSDictionary *)[dict objectForKey:@"notice"] objectForKey:@"text"];
  247. self.userNickName = [dict objectForKey:@"nickname"];
  248. self.lordRemarkName = [dict objectForKey:@"remarkName"];
  249. self.groupType = [dict objectForKey:@"groupType"];
  250. // self.call = [dict objectForKey:@"call"];
  251. if([self.note length]<=0)
  252. self.note = Localized(@"JX_NotAch");
  253. _tableName = self.roomId;
  254. [_members removeAllObjects];
  255. NSArray* array = [dict objectForKey:@"members"];
  256. NSMutableArray *arr = [NSMutableArray array];
  257. for(int i=0;i<[array count];i++){
  258. NSDictionary* p = [array objectAtIndex:i];
  259. memberData* option = [[memberData alloc] init];
  260. [option getDataFromDict:p]; //修改了
  261. option.roomId = self.roomId;
  262. // [option insert];
  263. p = nil;
  264. [arr addObject:option];
  265. }
  266. [self insertArray:arr withTransaction:YES];
  267. self.members = arr;
  268. self.curCount = [_members count];
  269. array = nil;
  270. }
  271. -(BOOL)checkTableCreatedInDb:(NSString *)queryRoomId{
  272. NSString* myUserId = MY_USER_ID;
  273. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  274. 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];
  275. BOOL worked = [db executeUpdate:createStr];
  276. return worked;
  277. }
  278. - (void)insertArray:(NSArray *)dataArray withTransaction:(BOOL)useTransaction{
  279. if (!self.userId) {
  280. return;
  281. }
  282. NSString* myUserId = MY_USER_ID;
  283. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  284. [self checkTableCreatedInDb:self.roomId];
  285. if (useTransaction) {
  286. [db beginTransaction];
  287. BOOL isRollBack = NO;
  288. @try {
  289. for (NSInteger i = 0; i < dataArray.count; i++) {
  290. memberData *memberData = dataArray[i];
  291. NSString *insertStr=[NSString stringWithFormat:@"INSERT INTO member_%@ (roomId,userId,userName,cardName,role,createTime,remarkName) VALUES (?,?,?,?,?,?,?)",memberData.roomId];
  292. BOOL worked = [db executeUpdate:insertStr,memberData.roomId,[NSNumber numberWithLong:memberData.userId],memberData.userNickName,memberData.userNickName,memberData.role,[NSNumber numberWithLongLong:memberData.createTime],memberData.lordRemarkName];
  293. if (!worked) {
  294. [self updateMember:memberData withDataBase:db];
  295. }
  296. }
  297. } @catch (NSException *exception) {
  298. isRollBack = YES;
  299. [db rollback];
  300. } @finally {
  301. if (!isRollBack) {
  302. [db commit];
  303. [db close];
  304. }else{
  305. [db close];
  306. [self insertArray:dataArray withTransaction:NO];
  307. }
  308. }
  309. }else{
  310. for (NSInteger i = 0; i < dataArray.count; i++) {
  311. memberData *memberData = dataArray[i];
  312. NSString *insertStr=[NSString stringWithFormat:@"INSERT INTO member_%@ (roomId,userId,userName,cardName,role,createTime,remarkName) VALUES (?,?,?,?,?,?,?)",memberData.roomId];
  313. BOOL worked = [db executeUpdate:insertStr,memberData.roomId,[NSNumber numberWithLong:memberData.userId],memberData.userNickName,memberData.userNickName,memberData.role,[NSNumber numberWithLongLong:memberData.createTime],memberData.lordRemarkName];
  314. if (!worked) {
  315. [self updateMember:memberData withDataBase:db];
  316. }
  317. }
  318. [db close];
  319. }
  320. }
  321. - (BOOL)updateMember:(memberData *)member withDataBase:(FMDatabase *)db{
  322. NSString* sql = [NSString stringWithFormat:@"update member_%@ set roomId=?,userId=?,userName=?,cardName=?,role=?,createTime=?,remarkName=? where userId=?",member.roomId];
  323. 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]];
  324. return worked;
  325. }
  326. -(void)setMembers:(NSMutableArray *)members{
  327. _tableName = self.roomId;
  328. [_members removeAllObjects];
  329. // NSArray* array = [dict objectForKey:@"members"];
  330. if ([[members firstObject] isMemberOfClass:[memberData class]]) {
  331. _members = members;
  332. }else{
  333. for(int i=0;i<[members count];i++){
  334. NSDictionary* p = [members objectAtIndex:i];
  335. memberData* option = [[memberData alloc] init];
  336. [option getDataFromDict:p];
  337. option.roomId = self.roomId;
  338. [option insert];
  339. p = nil;
  340. [_members addObject:option];
  341. }
  342. }
  343. // [self roomHeadImageToView:nil];
  344. }
  345. -(BOOL)isMember:(NSString*)theUserId{
  346. for(int i=0;i<[_members count];i++){
  347. memberData* p = [_members objectAtIndex:i];
  348. if([theUserId intValue] == p.userId)
  349. return YES;
  350. }
  351. return NO;
  352. }
  353. -(memberData*)getMember:(NSString*)theUserId{
  354. for(int i=0;i<[_members count];i++){
  355. memberData* p = [_members objectAtIndex:i];
  356. if([theUserId intValue] == p.userId)
  357. return p;
  358. }
  359. return nil;
  360. }
  361. -(NSString*)getNickNameInRoom{
  362. for(int i=0;i<[_members count];i++){
  363. memberData* p = [_members objectAtIndex:i];
  364. if([g_myself.userId intValue] == p.userId)
  365. return p.userNickName;
  366. }
  367. return g_myself.userNickname;
  368. }
  369. -(NSInteger)getCurCount{
  370. return [_members count];
  371. }
  372. -(void)setNickNameForUser:(JXUserObject*)user{
  373. for (int i=0; i<[_members count]; i++) {
  374. memberData* p = [_members objectAtIndex:i];
  375. if([user.userId intValue] == p.userId){
  376. user.userNickname = p.userNickName;
  377. break;
  378. }
  379. }
  380. }
  381. @end
  382. @implementation memberData
  383. @synthesize active;
  384. @synthesize talkTime;
  385. @synthesize role;
  386. @synthesize createTime;
  387. @synthesize updateTime;
  388. @synthesize sub;
  389. @synthesize userId;
  390. @synthesize userNickName;
  391. @synthesize onlinestate;
  392. @synthesize grade;
  393. -(id)init{
  394. self = [super init];
  395. return self;
  396. }
  397. -(void)dealloc{
  398. // NSLog(@"memberData.dealloc");
  399. // [super dealloc];
  400. }
  401. -(void)getDataFromDict:(NSDictionary*)dict{
  402. self.userId = [[dict objectForKey:@"userId"] longValue];
  403. self.userNickName = [dict objectForKey:@"nickname"];
  404. self.lordRemarkName = [dict objectForKey:@"remarkName"];
  405. self.sub = [[dict objectForKey:@"sub"] intValue];
  406. self.role = [NSNumber numberWithInt:[[dict objectForKey:@"role"] intValue]];
  407. self.talkTime = [[dict objectForKey:@"talkTime"] longLongValue];
  408. self.active = [[dict objectForKey:@"active"] longLongValue];
  409. self.createTime = [[dict objectForKey:@"createTime"] longLongValue];
  410. self.updateTime = [[dict objectForKey:@"updateTime"] longLongValue];
  411. self.offlineNoPushMsg = [[dict objectForKey:@"offlineNoPushMsg"] intValue];
  412. self.onlinestate = [NSString stringWithFormat:@"%@",[dict objectForKey:@"onlinestate"]];
  413. self.grade = [NSNumber numberWithInt:[[dict objectForKey:@"grade"] intValue]];
  414. self.bubbleFontId = [NSString stringWithFormat:@"%@",[dict objectForKey:@"bubbleFontId"]];
  415. self.gradeIndex = [NSString stringWithFormat:@"%@",[dict objectForKey:@"gradeIndex"]];
  416. // self.roomId;
  417. // self.userId;
  418. // self.userName;
  419. // self.cardName;
  420. // self.isAdmin;
  421. }
  422. #pragma mark -数据库
  423. -(BOOL)checkTableCreatedInDb:(NSString *)queryRoomId{
  424. NSString* myUserId = MY_USER_ID;
  425. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  426. 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];
  427. BOOL worked = [db executeUpdate:createStr];
  428. return worked;
  429. }
  430. +(NSArray <memberData *>*)getSelfMember:(NSString *)queryRoomId{
  431. NSString* sql = [NSString stringWithFormat:@"select * from member_%@",queryRoomId];
  432. return [[[memberData alloc] init] doFetch:sql roomId:queryRoomId];
  433. }
  434. -(BOOL)insert{
  435. if (!self.userId) {
  436. return NO;
  437. }
  438. NSString* myUserId = MY_USER_ID;
  439. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  440. [self checkTableCreatedInDb:self.roomId];
  441. // NSString* sql= [NSString stringWithFormat:@"select userId from member_%@ where userId=?",self.roomId];
  442. // FMResultSet *rs=[db executeQuery:sql,[NSNumber numberWithLong:self.userId]];
  443. // while ([rs next]) {
  444. // //不重复保存
  445. // return NO;
  446. // }
  447. if([self.role integerValue] == 0){
  448. self.role = [NSNumber numberWithInteger:3];
  449. }
  450. NSString *insertStr=[NSString stringWithFormat:@"INSERT INTO member_%@ (roomId,userId,userName,cardName,role,onlinestate,grade,createTime,remarkName,bubbleFontId,gradeIndex) VALUES (?,?,?,?,?,?,?,?,?,?,?)",self.roomId];
  451. BOOL worked = [db executeUpdate:insertStr,self.roomId,[NSNumber numberWithLong:self.userId],self.userNickName,self.userNickName,self.role,self.onlinestate,self.grade,[NSNumber numberWithLongLong:self.createTime],self.lordRemarkName,self.bubbleFontId,self.gradeIndex];
  452. if (!worked) {
  453. [self update];
  454. }
  455. db = nil;
  456. return worked;
  457. }
  458. -(BOOL)update{
  459. NSString* myUserId = MY_USER_ID;
  460. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  461. [self checkTableCreatedInDb:self.roomId];
  462. NSString* sql = [NSString stringWithFormat:@"update member_%@ set roomId=?,userId=?,userName=?,cardName=?,role=?,onlinestate=?,grade=?,createTime=?,remarkName=?,bubbleFontId=?,gradeIndex=? where userId=?",self.roomId];
  463. 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]];
  464. return worked;
  465. }
  466. -(BOOL)remove{
  467. NSString* myUserId = MY_USER_ID;
  468. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  469. [self checkTableCreatedInDb:self.roomId];
  470. BOOL worked=[db executeUpdate:[NSString stringWithFormat:@"delete from member_%@ where userId=?",self.roomId],[NSNumber numberWithLong:self.userId]];
  471. return worked;
  472. }
  473. //删除房间成员列表
  474. -(BOOL)deleteRoomMemeber{
  475. NSString* myUserId = MY_USER_ID;
  476. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  477. [self checkTableCreatedInDb:self.roomId];
  478. BOOL worked=[db executeUpdate:[NSString stringWithFormat:@"delete from member_%@",self.roomId]];
  479. return worked;
  480. }
  481. +(NSArray <memberData *>*)fetchAllMembers:(NSString *)queryRoomId{
  482. NSString* sql = [NSString stringWithFormat:@"select * from member_%@",queryRoomId];
  483. return [[[memberData alloc] init] doFetch:sql roomId:queryRoomId];
  484. }
  485. +(NSArray <memberData *>*)fetchAllMembers:(NSString *)queryRoomId sortByName:(BOOL)sortByName{
  486. NSString* sql;
  487. if (sortByName){//群@,名字排序
  488. sql = [NSString stringWithFormat:@"select * from member_%@ where userId != '%@' order by cardName",queryRoomId,MY_USER_ID];
  489. }else{//群成员,身份+加入时间
  490. sql = [NSString stringWithFormat:@"select * from member_%@ order by role,createTime",queryRoomId];
  491. }
  492. return [[[memberData alloc] init] doFetch:sql roomId:queryRoomId];
  493. }
  494. +(NSArray <memberData *>*)fetchAllMembersAndHideMonitor:(NSString *)queryRoomId sortByName:(BOOL)sortByName{
  495. NSString* sql;
  496. if (sortByName){//群@,名字排序
  497. sql = [NSString stringWithFormat:@"select * from member_%@ where (userId != '%@' and role != 4 and role!=5) order by cardName",queryRoomId,MY_USER_ID];
  498. }else{//群成员,身份+加入时间
  499. sql = [NSString stringWithFormat:@"select * from member_%@ where ((role != 4 and role!=5) or userId == '%@') order by role,createTime",queryRoomId,MY_USER_ID];
  500. }
  501. return [[[memberData alloc] init] doFetch:sql roomId:queryRoomId];
  502. }
  503. -(memberData *)searchMemberByName:(NSString *)cardName{
  504. NSString* sql = [NSString stringWithFormat:@"select * from member_%@ where cardName=%@",self.roomId,cardName];
  505. NSMutableArray* rmArray = [self doFetch:sql roomId:self.roomId];
  506. return (rmArray.count ? [rmArray firstObject] : nil);
  507. }
  508. -(memberData*)getCardNameById:(NSString*)aUserId {
  509. NSString* sql = [NSString stringWithFormat:@"select * from member_%@ where userId=%@",self.roomId,aUserId];
  510. NSMutableArray* rmArray = [self doFetch:sql roomId:self.roomId];
  511. return (rmArray.count ? [rmArray firstObject] : nil);
  512. }
  513. // 查找群主
  514. + (memberData *)searchGroupOwner:(NSString *)roomId {
  515. NSString* sql = [NSString stringWithFormat:@"select * from member_%@ where role=1",roomId];
  516. NSMutableArray* rmArray = [[[memberData alloc] init] doFetch:sql roomId:roomId];
  517. return (rmArray.count ? [rmArray firstObject] : nil);
  518. }
  519. // 更新身份
  520. - (BOOL)updateRole {
  521. NSString* myUserId = MY_USER_ID;
  522. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  523. [self checkTableCreatedInDb:self.roomId];
  524. NSString* sql = [NSString stringWithFormat:@"update member_%@ set role=? where userId=?",self.roomId];
  525. BOOL worked = [db executeUpdate:sql,self.role,[NSNumber numberWithLong:self.userId]];
  526. return worked;
  527. }
  528. // 更新其他人身份
  529. - (BOOL)updateRoleByUserId:(long)userId role:(NSNumber *)role {
  530. NSString* myUserId = MY_USER_ID;
  531. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  532. [self checkTableCreatedInDb:self.roomId];
  533. NSString* sql = [NSString stringWithFormat:@"update member_%@ set role=? where userId=?",self.roomId];
  534. BOOL worked = [db executeUpdate:sql,role,[NSNumber numberWithLong:userId]];
  535. return worked;
  536. }
  537. - (BOOL)updateCardName {
  538. NSString* myUserId = MY_USER_ID;
  539. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  540. [self checkTableCreatedInDb:self.roomId];
  541. NSString* sql = [NSString stringWithFormat:@"update member_%@ set cardName=? where userId=?",self.roomId];
  542. BOOL worked = [db executeUpdate:sql,self.cardName,[NSNumber numberWithLong:self.userId]];
  543. return worked;
  544. }
  545. // 更新群昵称
  546. - (BOOL)updateUserNickName {
  547. NSString* myUserId = MY_USER_ID;
  548. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  549. [self checkTableCreatedInDb:self.roomId];
  550. NSString* sql = [NSString stringWithFormat:@"update member_%@ set userName=? where userId=?",self.roomId];
  551. BOOL worked = [db executeUpdate:sql,self.userNickName,[NSNumber numberWithLong:self.userId]];
  552. return worked;
  553. }
  554. - (BOOL)updateOnlinestate{
  555. NSString* myUserId = MY_USER_ID;
  556. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  557. [self checkTableCreatedInDb:self.roomId];
  558. NSString* sql = [NSString stringWithFormat:@"update member_%@ set onlinestate=? where userId=?",self.roomId];
  559. BOOL worked = [db executeUpdate:sql,self.onlinestate,[NSNumber numberWithLong:self.userId]];
  560. return worked;
  561. }
  562. +(NSMutableArray *)searchMemberByFilter:(NSString *)filter room:(NSString *)roomId{
  563. NSString * sql = [NSString stringWithFormat:@"select * from member_%@ where (userName like '%%%@%%' or cardName like '%%%@%%')",roomId,filter,filter];
  564. NSMutableArray* rmArray = [[[memberData alloc] init] doFetch:sql roomId:roomId];
  565. return rmArray;
  566. }
  567. -(NSMutableArray*)doFetch:(NSString*)sql roomId:(NSString *)queryRoomId
  568. {
  569. NSMutableArray *resultArr=[[NSMutableArray alloc]init];
  570. NSString* myUserId = MY_USER_ID;
  571. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  572. [self checkTableCreatedInDb:queryRoomId];
  573. FMResultSet *rs=[db executeQuery:sql];
  574. while ([rs next]) {
  575. memberData * mem = [[memberData alloc] init];
  576. mem.userId = [[rs objectForColumnName:@"userId"] longValue];
  577. mem.roomId = [rs stringForColumn:@"roomId"];
  578. mem.userNickName = [rs stringForColumn:@"userName"];
  579. mem.lordRemarkName = [rs stringForColumn:@"remarkName"];
  580. mem.cardName = [rs stringForColumn:@"cardName"];
  581. mem.role = [rs objectForColumnName:@"role"];
  582. mem.createTime = [[rs objectForColumnName:@"createTime"] longLongValue];
  583. mem.onlinestate = [rs objectForColumnName:@"onlinestate"];
  584. mem.grade = [rs objectForColumnName:@"grade"];
  585. mem.bubbleFontId = [rs stringForColumn:@"bubbleFontId"];
  586. mem.gradeIndex = [rs stringForColumn:@"gradeIndex"];
  587. [resultArr addObject:mem];
  588. }
  589. [rs close];
  590. if([resultArr count]==0){
  591. resultArr = nil;
  592. }
  593. return resultArr;
  594. }
  595. + (memberData *)fetchMembersWithText:(NSString *)text withRoomId:(NSString *)roomId{
  596. NSString *sql = [NSString stringWithFormat:@"select * from member_%@ where userName like '%%%@%%'",roomId,text];
  597. return [[[memberData alloc] init] doFetchOneMember:sql roomId:roomId];
  598. }
  599. - (memberData *)doFetchOneMember:(NSString*)sql roomId:(NSString *)roomId
  600. {
  601. memberData *member = [[memberData alloc] init];
  602. NSString* myUserId = MY_USER_ID;
  603. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  604. [self checkTableCreatedInDb:roomId];
  605. FMResultSet *rs=[db executeQuery:sql];
  606. while ([rs next]) {
  607. memberData * mem = [[memberData alloc] init];
  608. mem.userId = [[rs objectForColumnName:@"userId"] longValue];
  609. mem.roomId = [rs stringForColumn:@"roomId"];
  610. mem.userNickName = [rs stringForColumn:@"userName"];
  611. mem.lordRemarkName = [rs stringForColumn:@"remarkName"];
  612. mem.cardName = [rs stringForColumn:@"cardName"];
  613. mem.role = [rs objectForColumnName:@"role"];
  614. mem.createTime = [[rs objectForColumnName:@"createTime"] longLongValue];
  615. member = mem;
  616. break;
  617. }
  618. [rs close];
  619. if (!member.userNickName) {
  620. return nil;
  621. }
  622. return member;
  623. }
  624. @end