roomData.m 32 KB

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