roomData.m 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839
  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. -(BOOL)checkTableChatViewCreatedInDb:(NSString *)queryRoomId{
  284. NSString* myUserId = MY_USER_ID;
  285. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  286. 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];
  287. // 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];
  288. BOOL worked = [db executeUpdate:createStr];
  289. return worked;
  290. }
  291. - (void)insertArray:(NSArray *)dataArray withTransaction:(BOOL)useTransaction{
  292. if (!self.userId) {
  293. return;
  294. }
  295. NSString* myUserId = MY_USER_ID;
  296. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  297. [self checkTableCreatedInDb:self.roomId];
  298. if (useTransaction) {
  299. [db beginTransaction];
  300. BOOL isRollBack = NO;
  301. @try {
  302. for (NSInteger i = 0; i < dataArray.count; i++) {
  303. //修改了增加了 查询
  304. memberData *memberData = dataArray[i];
  305. // NSString * sqlSelect = [NSString stringWithFormat:@"select * from member_%@ where userId = %ld",memberData.roomId,memberData.userId];
  306. // FMResultSet *rsSelect = [db executeQuery:sqlSelect];
  307. //
  308. // if (rsSelect.next) {
  309. //
  310. // return;
  311. // }
  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. } @catch (NSException *exception) {
  319. isRollBack = YES;
  320. [db rollback];
  321. } @finally {
  322. if (!isRollBack) {
  323. [db commit];
  324. [db close];
  325. }else{
  326. [db close];
  327. [self insertArray:dataArray withTransaction:NO];
  328. }
  329. }
  330. }else{
  331. for (NSInteger i = 0; i < dataArray.count; i++) {
  332. memberData *memberData = dataArray[i];
  333. NSString *insertStr=[NSString stringWithFormat:@"INSERT INTO member_%@ (roomId,userId,userName,cardName,role,createTime,remarkName) VALUES (?,?,?,?,?,?,?)",memberData.roomId];
  334. BOOL worked = [db executeUpdate:insertStr,memberData.roomId,[NSNumber numberWithLong:memberData.userId],memberData.userNickName,memberData.userNickName,memberData.role,[NSNumber numberWithLongLong:memberData.createTime],memberData.lordRemarkName];
  335. if (!worked) {
  336. [self updateMember:memberData withDataBase:db];
  337. }
  338. }
  339. [db close];
  340. }
  341. }
  342. - (BOOL)updateMember:(memberData *)member withDataBase:(FMDatabase *)db{
  343. NSString* sql = [NSString stringWithFormat:@"update member_%@ set roomId=?,userId=?,userName=?,cardName=?,role=?,createTime=?,remarkName=? where userId=?",member.roomId];
  344. 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]];
  345. return worked;
  346. }
  347. -(void)setMembers:(NSMutableArray *)members{
  348. _tableName = self.roomId;
  349. [_members removeAllObjects];
  350. // NSArray* array = [dict objectForKey:@"members"];
  351. if ([[members firstObject] isMemberOfClass:[memberData class]]) {
  352. _members = members;
  353. }else{
  354. for(int i=0;i<[members count];i++){
  355. NSDictionary* p = [members objectAtIndex:i];
  356. memberData* option = [[memberData alloc] init];
  357. [option getDataFromDict:p];
  358. option.roomId = self.roomId;
  359. [option insert];
  360. p = nil;
  361. [_members addObject:option];
  362. }
  363. }
  364. // [self roomHeadImageToView:nil];
  365. }
  366. -(BOOL)isMember:(NSString*)theUserId{
  367. for(int i=0;i<[_members count];i++){
  368. memberData* p = [_members objectAtIndex:i];
  369. if([theUserId intValue] == p.userId)
  370. return YES;
  371. }
  372. return NO;
  373. }
  374. -(memberData*)getMember:(NSString*)theUserId{
  375. for(int i=0;i<[_members count];i++){
  376. memberData* p = [_members objectAtIndex:i];
  377. if([theUserId intValue] == p.userId)
  378. return p;
  379. }
  380. return nil;
  381. }
  382. -(NSString*)getNickNameInRoom{
  383. for(int i=0;i<[_members count];i++){
  384. memberData* p = [_members objectAtIndex:i];
  385. if([g_myself.userId intValue] == p.userId)
  386. return p.userNickName;
  387. }
  388. return g_myself.userNickname;
  389. }
  390. -(NSInteger)getCurCount{
  391. return [_members count];
  392. }
  393. -(void)setNickNameForUser:(JXUserObject*)user{
  394. for (int i=0; i<[_members count]; i++) {
  395. memberData* p = [_members objectAtIndex:i];
  396. if([user.userId intValue] == p.userId){
  397. user.userNickname = p.userNickName;
  398. break;
  399. }
  400. }
  401. }
  402. @end
  403. @implementation memberData
  404. @synthesize active;
  405. @synthesize talkTime;
  406. @synthesize role;
  407. @synthesize createTime;
  408. @synthesize updateTime;
  409. @synthesize sub;
  410. @synthesize userId;
  411. @synthesize userNickName;
  412. @synthesize onlinestate;
  413. @synthesize grade;
  414. -(id)init{
  415. self = [super init];
  416. return self;
  417. }
  418. -(void)dealloc{
  419. // NSLog(@"memberData.dealloc");
  420. // [super dealloc];
  421. }
  422. -(void)getDataFromDict:(NSDictionary*)dict{
  423. //self.roomId = [dict objectForKey:@"roomId"];
  424. self.userId = [[dict objectForKey:@"userId"] longValue];
  425. self.userNickName = [dict objectForKey:@"nickname"];
  426. self.lordRemarkName = [dict objectForKey:@"remarkName"];
  427. self.sub = [[dict objectForKey:@"sub"] intValue];
  428. self.role = [NSNumber numberWithInt:[[dict objectForKey:@"role"] intValue]];
  429. self.talkTime = [[dict objectForKey:@"talkTime"] longLongValue];
  430. self.active = [[dict objectForKey:@"active"] longLongValue];
  431. self.createTime = [[dict objectForKey:@"createTime"] longLongValue];
  432. self.updateTime = [[dict objectForKey:@"updateTime"] longLongValue];
  433. self.offlineNoPushMsg = [[dict objectForKey:@"offlineNoPushMsg"] intValue];
  434. self.onlinestate = [NSString stringWithFormat:@"%@",[dict objectForKey:@"onlinestate"]];
  435. self.grade = [NSNumber numberWithInt:[[dict objectForKey:@"grade"] intValue]];
  436. self.bubbleFontId = [NSString stringWithFormat:@"%@",[dict objectForKey:@"bubbleFontId"]];
  437. self.gradeIndex = [NSString stringWithFormat:@"%@",[dict objectForKey:@"gradeIndex"]];
  438. self.gradeIndex = [NSString stringWithFormat:@"%@",[dict objectForKey:@"gradeIndex"]];
  439. // self.roomId;
  440. // self.userId;
  441. // self.userName;
  442. // self.cardName;
  443. // self.isAdmin;
  444. }
  445. #pragma mark -数据库
  446. -(BOOL)checkTableChatViewCreatedInDb:(NSString *)queryRoomId{
  447. NSString* myUserId = MY_USER_ID;
  448. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  449. 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];
  450. // 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];
  451. BOOL worked = [db executeUpdate:createStr];
  452. return worked;
  453. }
  454. #pragma mark -数据库
  455. -(BOOL)checkTableCreatedInDb:(NSString *)queryRoomId{
  456. NSString* myUserId = MY_USER_ID;
  457. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  458. 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];
  459. // 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];
  460. BOOL worked = [db executeUpdate:createStr];
  461. return worked;
  462. }
  463. +(NSArray <memberData *>*)getSelfMember:(NSString *)queryRoomId{
  464. NSString* sql = [NSString stringWithFormat:@"select * from member_%@",queryRoomId];
  465. return [[[memberData alloc] init] doFetch:sql roomId:queryRoomId];
  466. }
  467. /*2.创表
  468. NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"];
  469. // 1.创建数据库队列
  470. FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:filename];
  471. [queue inDatabase:^(FMDatabase *db) {
  472. NSString *insertStr=[NSString stringWithFormat:@"INSERT INTO member_%@ (roomId,userId,userName,cardName,role,onlinestate,grade,createTime,remarkName,bubbleFontId,gradeIndex) VALUES (?,?,?,?,?,?,?,?,?,?,?)",_roomId];
  473. 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];
  474. if (result) {
  475. NSLog(@"创表成功");
  476. } else {
  477. NSLog(@"创表失败");
  478. }
  479. }];
  480. [queue inDatabase:^(FMDatabase *db) {
  481. for (int i = 0; i<440; i++) {
  482. NSString *name = [NSString stringWithFormat:@"rose-%d", arc4random() % 1000];
  483. NSNumber *age = @(arc4random() % 100 + 1);
  484. NSNumber *sex = @(33);
  485. NSString *heightUser = @"身高";
  486. NSString *weightUser = @"体重";
  487. NSString *pangUser = @"胖胖";
  488. [db executeUpdate:@"insert into t_student (name, age,sex,heightUser,weightUser,pangUser) values (?, ?,?,?,?,?);", name, age,sex,heightUser,weightUser,pangUser];
  489. }
  490. }];
  491. */
  492. -(BOOL)insertChatView{
  493. if (!self.userId) {
  494. return NO;
  495. }
  496. NSString* myUserId = MY_USER_ID;
  497. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  498. // 0.获得沙盒中的数据库文件名
  499. if([self.role integerValue] == 0){
  500. self.role = [NSNumber numberWithInteger:3];
  501. }
  502. //'userId' INTEGER PRIMARY KEY NOT NULL UNIQUE , 'roomId' VARCHAR,
  503. NSString *insertStr=[NSString stringWithFormat:@"INSERT INTO member_%@ (roomId,userId,userName,cardName,role,onlinestate,grade,createTime,remarkName,bubbleFontId,gradeIndex) VALUES (?,?,?,?,?,?,?,?,?,?,?)",_roomId];
  504. 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];
  505. if (!worked) {
  506. [self update];
  507. }
  508. db = nil;
  509. return worked;
  510. }
  511. -(BOOL)insert{
  512. if (!self.userId) {
  513. return NO;
  514. }
  515. NSString* myUserId = MY_USER_ID;
  516. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  517. [self checkTableCreatedInDb:self.roomId];
  518. if([self.role integerValue] == 0){
  519. self.role = [NSNumber numberWithInteger:3];
  520. }
  521. NSString *insertStr=[NSString stringWithFormat:@"INSERT INTO member_%@ (roomId,userId,userName,cardName,role,onlinestate,grade,createTime,remarkName,bubbleFontId,gradeIndex) VALUES (?,?,?,?,?,?,?,?,?,?,?)",_roomId];
  522. 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];
  523. if (!worked) {
  524. [self update];
  525. }
  526. db = nil;
  527. return worked;
  528. }
  529. -(BOOL)update{
  530. NSString* myUserId = MY_USER_ID;
  531. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  532. [self checkTableCreatedInDb:self.roomId];
  533. // NSLog(@"_roomId::: 2%@ --%ld",_roomId,userId);
  534. NSString* sql = [NSString stringWithFormat:@"update member_%@ set roomId=?,userId=?,userName=?,cardName=?,role=?,onlinestate=?,grade=?,createTime=?,remarkName=?,bubbleFontId=?,gradeIndex=? where userId=?",self.roomId];
  535. 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]];
  536. return worked;
  537. }
  538. -(BOOL)remove{
  539. NSString* myUserId = MY_USER_ID;
  540. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  541. [self checkTableCreatedInDb:self.roomId];
  542. BOOL worked=[db executeUpdate:[NSString stringWithFormat:@"delete from member_%@ where userId=?",self.roomId],[NSNumber numberWithLong:self.userId]];
  543. return worked;
  544. }
  545. //删除房间成员列表
  546. -(BOOL)deleteRoomMemeber{
  547. NSString* myUserId = MY_USER_ID;
  548. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  549. [self checkTableCreatedInDb:self.roomId];
  550. BOOL worked=[db executeUpdate:[NSString stringWithFormat:@"delete from member_%@",self.roomId]];
  551. return worked;
  552. }
  553. +(NSArray <memberData *>*)fetchAllMembers:(NSString *)queryRoomId{
  554. NSString* sql = [NSString stringWithFormat:@"select * from member_%@",queryRoomId];
  555. return [[[memberData alloc] init] doFetch:sql roomId:queryRoomId];
  556. }
  557. +(NSArray <memberData *>*)fetchAllMembers:(NSString *)queryRoomId sortByName:(BOOL)sortByName{
  558. NSString* sql;
  559. if (sortByName){//群@,名字排序
  560. sql = [NSString stringWithFormat:@"select * from member_%@ where userId != '%@' order by cardName",queryRoomId,MY_USER_ID];
  561. }else{//群成员,身份+加入时间
  562. sql = [NSString stringWithFormat:@"select * from member_%@ order by role,createTime",queryRoomId];
  563. }
  564. return [[[memberData alloc] init] doFetch:sql roomId:queryRoomId];
  565. }
  566. +(NSArray <memberData *>*)fetchAllMembersAndHideMonitor:(NSString *)queryRoomId sortByName:(BOOL)sortByName{
  567. NSString* sql;
  568. if (sortByName){//群@,名字排序
  569. sql = [NSString stringWithFormat:@"select * from member_%@ where (userId != '%@' and role != 4 and role!=5) order by cardName",queryRoomId,MY_USER_ID];
  570. }else{//群成员,身份+加入时间
  571. sql = [NSString stringWithFormat:@"select * from member_%@ where ((role != 4 and role!=5) or userId == '%@') order by role,createTime",queryRoomId,MY_USER_ID];
  572. }
  573. return [[[memberData alloc] init] doFetch:sql roomId:queryRoomId];
  574. }
  575. -(memberData *)searchMemberByName:(NSString *)cardName{
  576. NSString* sql = [NSString stringWithFormat:@"select * from member_%@ where cardName=%@",self.roomId,cardName];
  577. NSMutableArray* rmArray = [self doFetch:sql roomId:self.roomId];
  578. return (rmArray.count ? [rmArray firstObject] : nil);
  579. }
  580. -(memberData*)getCardNameById:(NSString*)aUserId {
  581. NSString* sql = [NSString stringWithFormat:@"select * from member_%@ where userId=%@",self.roomId,aUserId];
  582. NSMutableArray* rmArray = [self doFetch:sql roomId:self.roomId];
  583. return (rmArray.count ? [rmArray firstObject] : nil);
  584. }
  585. // 查找群主
  586. + (memberData *)searchGroupOwner:(NSString *)roomId {
  587. NSString* sql = [NSString stringWithFormat:@"select * from member_%@ where role=1",roomId];
  588. NSMutableArray* rmArray = [[[memberData alloc] init] doFetch:sql roomId:roomId];
  589. return (rmArray.count ? [rmArray firstObject] : nil);
  590. }
  591. // 更新身份
  592. - (BOOL)updateRole {
  593. NSString* myUserId = MY_USER_ID;
  594. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  595. [self checkTableCreatedInDb:self.roomId];
  596. NSString* sql = [NSString stringWithFormat:@"update member_%@ set role=? where userId=?",self.roomId];
  597. BOOL worked = [db executeUpdate:sql,self.role,[NSNumber numberWithLong:self.userId]];
  598. return worked;
  599. }
  600. // 更新其他人身份
  601. - (BOOL)updateRoleByUserId:(long)userId role:(NSNumber *)role {
  602. NSString* myUserId = MY_USER_ID;
  603. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  604. [self checkTableCreatedInDb:self.roomId];
  605. NSString* sql = [NSString stringWithFormat:@"update member_%@ set role=? where userId=?",self.roomId];
  606. BOOL worked = [db executeUpdate:sql,role,[NSNumber numberWithLong:userId]];
  607. return worked;
  608. }
  609. - (BOOL)updateCardName {
  610. NSString* myUserId = MY_USER_ID;
  611. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  612. [self checkTableCreatedInDb:self.roomId];
  613. NSString* sql = [NSString stringWithFormat:@"update member_%@ set cardName=? where userId=?",self.roomId];
  614. BOOL worked = [db executeUpdate:sql,self.cardName,[NSNumber numberWithLong:self.userId]];
  615. return worked;
  616. }
  617. // 更新群昵称
  618. - (BOOL)updateUserNickName {
  619. NSString* myUserId = MY_USER_ID;
  620. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  621. [self checkTableCreatedInDb:self.roomId];
  622. NSString* sql = [NSString stringWithFormat:@"update member_%@ set userName=? where userId=?",self.roomId];
  623. BOOL worked = [db executeUpdate:sql,self.userNickName,[NSNumber numberWithLong:self.userId]];
  624. return worked;
  625. }
  626. - (BOOL)updateOnlinestate{
  627. NSString* myUserId = MY_USER_ID;
  628. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  629. [self checkTableCreatedInDb:self.roomId];
  630. NSString* sql = [NSString stringWithFormat:@"update member_%@ set onlinestate=? where userId=?",self.roomId];
  631. BOOL worked = [db executeUpdate:sql,self.onlinestate,[NSNumber numberWithLong:self.userId]];
  632. return worked;
  633. }
  634. +(NSMutableArray *)searchMemberByFilter:(NSString *)filter room:(NSString *)roomId{
  635. NSString * sql = [NSString stringWithFormat:@"select * from member_%@ where (userName like '%%%@%%' or cardName like '%%%@%%')",roomId,filter,filter];
  636. NSMutableArray* rmArray = [[[memberData alloc] init] doFetch:sql roomId:roomId];
  637. return rmArray;
  638. }
  639. -(NSMutableArray*)doFetch:(NSString*)sql roomId:(NSString *)queryRoomId
  640. {
  641. NSMutableArray *resultArr=[[NSMutableArray alloc]init];
  642. NSString* myUserId = MY_USER_ID;
  643. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  644. [self checkTableCreatedInDb:queryRoomId];
  645. FMResultSet *rs=[db executeQuery:sql];
  646. while ([rs next]) {
  647. memberData * mem = [[memberData alloc] init];
  648. mem.userId = [[rs objectForColumnName:@"userId"] longValue];
  649. mem.roomId = [rs stringForColumn:@"roomId"];
  650. mem.userNickName = [rs stringForColumn:@"userName"];
  651. mem.lordRemarkName = [rs stringForColumn:@"remarkName"];
  652. mem.cardName = [rs stringForColumn:@"cardName"];
  653. mem.role = [rs objectForColumnName:@"role"];
  654. mem.createTime = [[rs objectForColumnName:@"createTime"] longLongValue];
  655. mem.onlinestate = [rs objectForColumnName:@"onlinestate"];
  656. mem.grade = [rs objectForColumnName:@"grade"];
  657. mem.bubbleFontId = [rs stringForColumn:@"bubbleFontId"];
  658. mem.gradeIndex = [rs stringForColumn:@"gradeIndex"];
  659. [resultArr addObject:mem];
  660. }
  661. [rs close];
  662. if([resultArr count]==0){
  663. resultArr = nil;
  664. }
  665. return resultArr;
  666. }
  667. + (memberData *)fetchMembersWithText:(NSString *)text withRoomId:(NSString *)roomId{
  668. NSString *sql = [NSString stringWithFormat:@"select * from member_%@ where userName like '%%%@%%'",roomId,text];
  669. return [[[memberData alloc] init] doFetchOneMember:sql roomId:roomId];
  670. }
  671. - (memberData *)doFetchOneMember:(NSString*)sql roomId:(NSString *)roomId
  672. {
  673. memberData *member = [[memberData alloc] init];
  674. NSString* myUserId = MY_USER_ID;
  675. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  676. [self checkTableCreatedInDb:roomId];
  677. FMResultSet *rs=[db executeQuery:sql];
  678. while ([rs next]) {
  679. memberData * mem = [[memberData alloc] init];
  680. mem.userId = [[rs objectForColumnName:@"userId"] longValue];
  681. mem.roomId = [rs stringForColumn:@"roomId"];
  682. mem.userNickName = [rs stringForColumn:@"userName"];
  683. mem.lordRemarkName = [rs stringForColumn:@"remarkName"];
  684. mem.cardName = [rs stringForColumn:@"cardName"];
  685. mem.role = [rs objectForColumnName:@"role"];
  686. mem.createTime = [[rs objectForColumnName:@"createTime"] longLongValue];
  687. member = mem;
  688. break;
  689. }
  690. [rs close];
  691. if (!member.userNickName) {
  692. return nil;
  693. }
  694. return member;
  695. }
  696. @end