JXUserObject.m 68 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687
  1. //
  2. // JXUserObject.m
  3. //
  4. // Created by Reese on 13-8-11.
  5. // Copyright (c) 2013年 Reese. All rights reserved.
  6. //
  7. #import "JXUserObject.h"
  8. #import "FMDatabase.h"
  9. #import "FMResultSet.h"
  10. #import "AppDelegate.h"
  11. #import "JXFriendObject.h"
  12. #import "JXMessageObject.h"
  13. #import "roomData.h"
  14. #import "resumeData.h"
  15. #import "DESUtil.h"
  16. #import "JXRoomRemind.h"
  17. @implementation JXUserObject
  18. MJCodingImplementation
  19. @synthesize
  20. telephone,
  21. password,
  22. birthday,
  23. companyName,
  24. model,
  25. osVersion,
  26. serialNumber,
  27. location,
  28. //description,
  29. sex,
  30. countryId,
  31. provinceId,
  32. cityId,
  33. areaId,
  34. latitude,
  35. longitude,
  36. level,
  37. vip,
  38. fansCount,
  39. veryCare,
  40. veryCareTones,
  41. attCount,
  42. membershipAccount;
  43. static JXUserObject *sharedUser;
  44. +(JXUserObject*)sharedInstance{
  45. static dispatch_once_t onceToken;
  46. dispatch_once(&onceToken, ^{
  47. sharedUser=[[JXUserObject alloc]init];
  48. });
  49. return sharedUser;
  50. }
  51. -(id)init{
  52. self = [super init];
  53. if(self){
  54. _tableName = @"friend";
  55. _favorites = [NSMutableArray array];
  56. _phoneDic = [NSMutableDictionary dictionary];
  57. _msgBackGroundUrl = [NSString string];
  58. }
  59. return self;
  60. }
  61. -(void)dealloc{
  62. self.telephone = nil;
  63. self.password = nil;
  64. self.userType = nil;
  65. self.birthday = nil;
  66. self.companyName = nil;
  67. self.model = nil;
  68. self.osVersion = nil;
  69. self.serialNumber = nil;
  70. self.location = nil;
  71. self.sex = nil;
  72. self.role = nil;
  73. self.countryId = nil;
  74. self.provinceId = nil;
  75. self.cityId = nil;
  76. self.areaId = nil;
  77. self.latitude = nil;
  78. self.longitude = nil;
  79. self.level = nil;
  80. self.vip = nil;
  81. self.fansCount = nil;
  82. self.attCount = nil;
  83. self.myInviteCode = nil;
  84. self.membershipAccount = nil;
  85. // NSLog(@"JXUserObject.dealloc");
  86. // [super dealloc];
  87. }
  88. -(BOOL)insert{
  89. self.roomFlag = [NSNumber numberWithInt:0];
  90. self.companyId = [NSNumber numberWithInt:0];
  91. if ([self.offlineNoPushMsg intValue] <= 0) {
  92. self.offlineNoPushMsg = [NSNumber numberWithInt:0];
  93. }
  94. self.isAtMe = [NSNumber numberWithInt:0];
  95. self.talkTime = [NSNumber numberWithLong:0];
  96. return [super insert];
  97. }
  98. -(BOOL)insertRoom
  99. {
  100. self.roomFlag= [NSNumber numberWithInt:1];
  101. self.companyId= [NSNumber numberWithInt:0];
  102. self.status= [NSNumber numberWithInt:2];
  103. if ([self.offlineNoPushMsg intValue] <= 0) {
  104. self.offlineNoPushMsg = [NSNumber numberWithInt:0];
  105. }
  106. self.isAtMe = [NSNumber numberWithInt:0];
  107. return [super insert];
  108. }
  109. -(JXUserObject*)userFromDictionary:(NSDictionary*)aDic
  110. {
  111. JXUserObject* user = [[JXUserObject alloc]init];
  112. [super userFromDictionary:user dict:aDic];
  113. return user;
  114. }
  115. //好友关系
  116. -(NSMutableArray*)fetchAllFriendsFromLocal
  117. {
  118. NSString* sql = @"select * from friend where (status=2 or status=10) and companyId=0 and roomFlag=0 and isDevice=0 and userType <> 2 order by status desc, timeCreate desc";
  119. return [self doFetch:sql];
  120. }
  121. // 获取系统公众号
  122. -(NSMutableArray*)fetchSystemUser {
  123. NSString* sql = @"select * from friend where (userType=2 and (status=8 or status=2) and companyId=0 and roomFlag=0 and isDevice=0) or userId=1100 order by timeCreate asc";
  124. return [self doFetch:sql];
  125. }
  126. //搜索好友
  127. -(NSMutableArray*)fetchFriendsFromLocalWhereLike:(NSString *)searchStr
  128. {
  129. NSString* sql = [NSString stringWithFormat:@"select * from friend where (status=8 or status=2) and companyId=0 and roomFlag=0 and userNickname like '%%%@%%' order by status desc, timeCreate desc",searchStr];
  130. return [self doFetch:sql];
  131. }
  132. //搜索好友
  133. -(NSMutableArray*)fetchFriendsFromLocalWhereLikeNickNameOrRemarkNameOrTelephone:(NSString *)searchStr
  134. {
  135. NSString* sql = [NSString stringWithFormat:@"select * from friend where (status=8 or status=2) and companyId=0 and roomFlag=0 and userNickname like '%%%@%%' order by status desc, timeCreate desc",searchStr];
  136. NSMutableArray *userNicknameArray = [self doFetch:sql];
  137. sql = [NSString stringWithFormat:@"select * from friend where (status=8 or status=2) and companyId=0 and roomFlag=0 and remarkName like '%%%@%%' order by status desc, timeCreate desc",searchStr];
  138. NSMutableArray *remarkNameArray = [self doFetch:sql];
  139. sql = [NSString stringWithFormat:@"select * from friend where (status=8 or status=2) and companyId=0 and roomFlag=0 and telephone like '%%%@%%' order by status desc, timeCreate desc",searchStr];
  140. NSMutableArray *telephoneArray = [self doFetch:sql];
  141. // 三个都有值返回合成
  142. if (userNicknameArray!=nil && remarkNameArray!=nil && telephoneArray!=nil ) {
  143. NSMutableArray * bigArray = [[NSMutableArray alloc] initWithArray:userNicknameArray];
  144. [bigArray addObjectsFromArray:remarkNameArray];
  145. [bigArray addObjectsFromArray:telephoneArray];
  146. NSMutableDictionary *tmpDict = [NSMutableDictionary dictionary];
  147. for (JXUserObject *userObject in bigArray) {
  148. [tmpDict setObject:userObject forKey:userObject.userId];
  149. }
  150. return [tmpDict.allValues mutableCopy];
  151. }
  152. // 二个有值合成
  153. if (userNicknameArray!=nil && remarkNameArray!=nil) {
  154. NSMutableArray * bigArray = [[NSMutableArray alloc] initWithArray:userNicknameArray];
  155. [bigArray addObjectsFromArray:remarkNameArray];
  156. NSMutableDictionary *tmpDict = [NSMutableDictionary dictionary];
  157. for (JXUserObject *userObject in bigArray) {
  158. [tmpDict setObject:userObject forKey:userObject.userId];
  159. }
  160. return [tmpDict.allValues mutableCopy];
  161. }
  162. if (remarkNameArray!=nil && telephoneArray!=nil) {
  163. NSMutableArray * bigArray = [[NSMutableArray alloc] initWithArray:remarkNameArray];
  164. [bigArray addObjectsFromArray:telephoneArray];
  165. NSMutableDictionary *tmpDict = [NSMutableDictionary dictionary];
  166. for (JXUserObject *userObject in bigArray) {
  167. [tmpDict setObject:userObject forKey:userObject.userId];
  168. }
  169. return [tmpDict.allValues mutableCopy];
  170. }
  171. if (userNicknameArray!=nil && telephoneArray!=nil) {
  172. NSMutableArray * bigArray = [[NSMutableArray alloc] initWithArray:userNicknameArray];
  173. [bigArray addObjectsFromArray:telephoneArray];
  174. NSMutableDictionary *tmpDict = [NSMutableDictionary dictionary];
  175. for (JXUserObject *userObject in bigArray) {
  176. [tmpDict setObject:userObject forKey:userObject.userId];
  177. }
  178. return [tmpDict.allValues mutableCopy];
  179. }
  180. // 一个
  181. if (userNicknameArray) {
  182. return userNicknameArray;
  183. }
  184. if (remarkNameArray) {
  185. return remarkNameArray;
  186. }
  187. if (telephoneArray) {
  188. return telephoneArray;
  189. }
  190. return @[].mutableCopy;
  191. }
  192. //获取数据库好友列表所有的好友、公众号、群组
  193. -(NSMutableArray*)fetchAllFriends
  194. {
  195. NSString* sql = @"select * from friend where (status=-1 or status=1 or status=2 or status=8) and companyId=0 order by status desc, timeCreate desc";
  196. return [self doFetch:sql];
  197. }
  198. //所有联系人,0没任何关系,-1黑名单,2好友关系,8系统账号,1单向关注
  199. -(NSMutableArray*)fetchAllFriendsOrNotFromLocal
  200. {
  201. NSString* sql = @"select * from friend where (status=-1 or status=1 or status=2) and companyId=0 and roomFlag=0 order by status desc, timeCreate desc";
  202. return [self doFetch:sql];
  203. }
  204. -(NSMutableArray*)fetchAllRoomsFromLocal
  205. {
  206. NSString* sql = @"select * from friend where roomFlag=1 and companyId =0 and groupStatus = 0 order by status desc, timeCreate desc";
  207. return [self doFetch:sql];
  208. }
  209. // 获取指定类型群组
  210. -(NSMutableArray*)fetchRoomsFromLocalWithCategory:(NSNumber *)category
  211. {
  212. NSString* sql = [NSString stringWithFormat:@"select * from friend where roomFlag=1 and category=%@ and companyId =0 order by status desc, timeCreate desc",category];
  213. ;
  214. return [self doFetch:sql];
  215. }
  216. -(NSMutableArray*)fetchAllCompanyFromLocal
  217. {
  218. NSString* sql = [NSString stringWithFormat:@"select * from friend where companyId>0 and roomFlag=0 and userId!='%@' order by status desc, timeCreate desc",MY_USER_ID];
  219. return [self doFetch:sql];
  220. }
  221. //主动打招呼后status=1
  222. -(NSMutableArray*)fetchAllPayFromLocal
  223. {
  224. NSString* sql = [NSString stringWithFormat:@"select * from friend where status=1 and companyId=0 and roomFlag=0 and userId!='%@' order by status desc, timeCreate desc",MY_USER_ID];
  225. return [self doFetch:sql];
  226. }
  227. -(NSMutableArray*)fetchAllUserFromLocal
  228. {
  229. NSString* sql = [NSString stringWithFormat:@"select * from friend where status=2 and userType != 2 and companyId=0 and roomFlag=0 and userId!='%@' order by status desc, timeCreate desc",MY_USER_ID];
  230. return [self doFetch:sql];
  231. }
  232. -(NSMutableArray*)fetchAllBlackFromLocal
  233. {
  234. NSString* sql = @"select * from friend where status=-1 order by status desc, timeCreate desc";
  235. return [self doFetch:sql];
  236. }
  237. -(NSMutableArray*)fetchBlackFromLocalWhereLike:(NSString *)searchStr
  238. {
  239. NSString* sql = [NSString stringWithFormat:@"select * from friend where status<0 and (userNickname like '%%%@%%' or remarkName like '%%%@%%') order by status desc, timeCreate desc",searchStr,searchStr];
  240. return [self doFetch:sql];
  241. }
  242. //插入本地不存在的好友
  243. - (void)insertFriend{
  244. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:g_server.myself.userId];
  245. FMResultSet * rs = [db executeQuery:[NSString stringWithFormat:@"select * from friend where userId=?"],self.userId];
  246. if (![rs next]) {
  247. NSString *insertStr=[NSString stringWithFormat:@"INSERT INTO friend ('userId','userNickname','remarkName','role','createUserId','userDescription','userHead','roomFlag','category','timeCreate','newMsgs','status','userType','companyId','type','content','isMySend','roomId','timeSend','downloadTime','lastInput','showRead','showMember','allowSendCard','allowInviteFriend','allowUploadFile','allowConference','allowSpeakCourse','isNeedVerify','topTime','groupStatus','isOnLine','isOpenReadDel','isSendRecipt','isDevice','chatRecordTimeOut','offlineNoPushMsg','isAtMe','talkTime','publicKeyDH','publicKeyRSARoom','chatKeyGroup','veryCare','veryCareTones','telephone') VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"];
  248. BOOL worked = [db executeUpdate:insertStr,self.userId,self.userNickname,self.remarkName,self.role,self.createUserId,self.userDescription,nil,self.roomFlag,self.category,self.timeCreate,self.msgsNew,self.status,self.userType,self.companyId,self.type,self.content,self.isMySend,self.roomId,self.timeSend,self.downloadTime,self.lastInput,self.showRead,self.showMember,self.allowSendCard,self.allowInviteFriend,self.allowUploadFile,self.allowConference,self.allowSpeakCourse,self.isNeedVerify,self.topTime,self.groupStatus,self.isOnLine,self.isOpenReadDel, self.isSendRecipt,self.isDevice,self.chatRecordTimeOut,self.offlineNoPushMsg,self.isAtMe,self.talkTime,self.publicKeyDH,self.publicKeyRSARoom,self.chatKeyGroup,self.veryCare,self.veryCareTones,self.telephone];
  249. NSLog(@"%d",worked);
  250. }else{
  251. //因为以前的漏洞,取消黑名单后status出现与服务端不一致
  252. // NSString * status=[rs objectForColumnName:kUSER_STATUS];
  253. // if ([status intValue] != [self.status intValue]) {
  254. NSString *insertStr=[NSString stringWithFormat:@"update friend set userNickname =?,status=?,userType=? where userId=?"];
  255. BOOL worked = [db executeUpdate:insertStr,self.userNickname,self.status,self.userType,self.userId];
  256. NSLog(@"%d",worked);
  257. // }
  258. }
  259. [g_App copyDbWithUserId:MY_USER_ID];
  260. }
  261. -(void)createSystemFriend{
  262. JXUserObject* user = [[JXUserObject alloc] init];
  263. user.userId = CALL_CENTER_USERID;
  264. user.userNickname = Localized(@"JXUserObject_SysMessage");
  265. // status 暂不用8, 改为2. 消息界面需要用到好友关系
  266. user.status = [NSNumber numberWithInt:2];
  267. user.userType = [NSNumber numberWithInt:2];
  268. user.roomFlag = [NSNumber numberWithInt:0];
  269. // user.role = [NSNumber numberWithInt:2];
  270. user.content = Localized(@"JXUserObject_Wealcome");
  271. user.timeSend = [NSDate date];
  272. user.chatRecordTimeOut = g_myself.chatRecordTimeOut;
  273. if(!user.haveTheUser)
  274. [user insert];
  275. else {
  276. [user updateUserNickname];
  277. }
  278. user.userId = FRIEND_CENTER_USERID;
  279. user.userNickname = Localized(@"JXNewFriendVC_NewFirend");
  280. user.status = [NSNumber numberWithInt:8];
  281. user.userType = [NSNumber numberWithInt:0];
  282. user.roomFlag = [NSNumber numberWithInt:0];
  283. // user.content = Localized(@"JXUserObject_Friend");
  284. user.content = nil;
  285. user.timeSend = [NSDate date];
  286. user.chatRecordTimeOut = g_myself.chatRecordTimeOut;
  287. if(!user.haveTheUser)
  288. [user insert];
  289. else {
  290. [user updateUserNickname];
  291. }
  292. user.userId = BLOG_CENTER_USERID;
  293. user.userNickname = Localized(@"JXUserObject_BusinessMessage");
  294. user.status = [NSNumber numberWithInt:9];
  295. user.userType = [NSNumber numberWithInt:0];
  296. user.roomFlag = [NSNumber numberWithInt:0];
  297. user.content = nil;
  298. user.timeSend = [NSDate date];
  299. user.chatRecordTimeOut = g_myself.chatRecordTimeOut;
  300. if(!user.haveTheUser)
  301. [user insert];
  302. else {
  303. [user update];
  304. }
  305. // 我的其他端设备
  306. NSArray *names = @[Localized(@"JX_MyAndroid"), Localized(@"JX_MyWindowsComputer"), Localized(@"JX_MyMacComputer"), Localized(@"JX_MyWebPage")];
  307. NSArray *userIds = @[ANDROID_USERID, PC_USERID, MAC_USERID, WEB_USERID];
  308. for (NSInteger i = 0; i < names.count; i ++) {
  309. // BOOL isMultipleLogin = [[g_default objectForKey:kISMultipleLogin] boolValue];
  310. BOOL isMultipleLogin = [g_myself.multipleDevices intValue] > 0 ? YES : NO;
  311. user.userId = userIds[i];
  312. user.userNickname = names[i];
  313. user.status = [NSNumber numberWithInt:10];
  314. user.userType = [NSNumber numberWithInt:0];
  315. user.roomFlag = [NSNumber numberWithInt:0];
  316. user.isDevice = [NSNumber numberWithInt:1];
  317. user.isOnLine = [NSNumber numberWithInt:0];
  318. user.content = nil;
  319. user.timeSend = [NSDate date];
  320. user.chatRecordTimeOut = g_myself.chatRecordTimeOut;
  321. if (isMultipleLogin) {
  322. if (![user haveTheUser]) {
  323. [user insert];
  324. }else {
  325. [user updateIsOnLine];
  326. [g_notify postNotificationName:kUpdateIsOnLineMultipointLogin object:nil];
  327. }
  328. }else {
  329. [user delete];
  330. }
  331. }
  332. }
  333. -(NSMutableArray*)doFetch:(NSString*)sql
  334. {
  335. NSMutableArray *resultArr=[[NSMutableArray alloc]init];
  336. NSString* myUserId = MY_USER_ID;
  337. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  338. [super checkTableCreatedInDb:db];
  339. FMResultSet *rs=[db executeQuery:sql];
  340. while ([rs next]) {
  341. JXUserObject *user=[[JXUserObject alloc] init];
  342. [super userFromDataset:user rs:rs];
  343. //[self userFromDataset:rs];
  344. [resultArr addObject:user];
  345. }
  346. [rs close];
  347. if([resultArr count]==0){
  348. resultArr = nil;
  349. }
  350. return resultArr;
  351. }
  352. -(JXUserObject*)getUserById:(NSString*)aUserId
  353. {
  354. NSString* myUserId = MY_USER_ID;
  355. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  356. FMResultSet *rs=[db executeQuery:[NSString stringWithFormat:@"select * from %@ where userId=?",_tableName],aUserId];
  357. if ([rs next]) {
  358. JXUserObject *user=[[JXUserObject alloc]init];
  359. [super userFromDataset:user rs:rs];
  360. [rs close];
  361. return user;
  362. };
  363. return nil;
  364. }
  365. -(JXUserObject*)getUserByRoomId:(NSString*)roomId {
  366. NSString* myUserId = MY_USER_ID;
  367. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  368. FMResultSet *rs=[db executeQuery:[NSString stringWithFormat:@"select * from %@ where roomId=?",_tableName],roomId];
  369. if ([rs next]) {
  370. JXUserObject *user=[[JXUserObject alloc]init];
  371. [super userFromDataset:user rs:rs];
  372. [rs close];
  373. return user;
  374. };
  375. return nil;
  376. }
  377. -(int)getNewTotal
  378. {
  379. NSString* myUserId = MY_USER_ID;
  380. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  381. int n = 0;
  382. FMResultSet *rs=[db executeQuery:[NSString stringWithFormat:@"select sum(newMsgs) from %@ where newMsgs>0",_tableName]];
  383. if ([rs next]) {
  384. n = [[rs objectForColumnIndex:0] intValue];
  385. [rs close];
  386. };
  387. return n;
  388. }
  389. -(void)getDataFromDict:(NSDictionary*)dict{
  390. [self userFromDictionary:dict];
  391. self.type = nil;
  392. self.content = nil;
  393. // self.timeSend = nil;
  394. self.msgsNew = nil;
  395. self.timeCreate = [NSDate date];
  396. self.roomFlag = [NSNumber numberWithInt:0];
  397. /*
  398. 我是A,调user/get?userId=B
  399. friends->isBeenBlack,A是不是被B拉黑
  400. friends->Blacklist,A是不是拉黑B
  401. */
  402. self.status = [(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"status"];
  403. self.userType = [dict objectForKey:@"userType"];
  404. if([[(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"blacklist"] boolValue])
  405. self.status = [NSNumber numberWithInt:friend_status_black];
  406. self.isBeenBlack = [(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"isBeenBlack"];
  407. if ([self.isBeenBlack intValue] == 1) {
  408. self.status = [NSNumber numberWithInt:friend_status_hisBlack];
  409. }
  410. // if([[[dict objectForKey:@"friends"] objectForKey:@"isBeenBlack"] boolValue])
  411. // self.status = [NSNumber numberWithInt:friend_status_hisBlack];
  412. self.userId = [[dict objectForKey:@"userId"] stringValue];
  413. NSString *remarkName = [(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"remarkName"];
  414. if (remarkName.length > 0) {
  415. self.remarkName = remarkName;
  416. }
  417. NSString *describe = [(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"describe"];
  418. if (describe.length > 0) {
  419. self.describe = describe;
  420. }
  421. // if ([dict objectForKey:@"toFriendsRole"]) {
  422. // NSArray *roleDict = [dict objectForKey:@"toFriendsRole"];
  423. // self.role = @([[[roleDict firstObject] objectForKey:@"role"] intValue]);
  424. // }
  425. self.userNickname = [dict objectForKey:@"nickname"];
  426. self.userDescription = [dict objectForKey:@"description"];
  427. self.companyId = [dict objectForKey:@"companyId"];
  428. self.companyName = [(NSDictionary *)[dict objectForKey:@"company"] objectForKey:@"name"];
  429. self.msgBackGroundUrl = [dict objectForKey:@"msgBackGroundUrl"];
  430. self.showLastLoginTime = [dict objectForKey:@"showLastLoginTime"];
  431. self.showLastLoginTime = [dict objectForKey:@"showLastLoginTime"];
  432. self.membershipAccount = [dict objectForKey:@"membershipAccount"];
  433. self.telephone = [dict objectForKey:@"telephone"];
  434. self.phone = [dict objectForKey:@"phone"];
  435. self.password = [dict objectForKey:@"password"];
  436. self.userType = [dict objectForKey:@"userType"];
  437. self.birthday = [NSDate dateWithTimeIntervalSince1970:[[dict objectForKey:@"birthday"] longLongValue]];
  438. self.sex = [dict objectForKey:@"sex"];
  439. self.countryId = [dict objectForKey:@"countryId"];
  440. self.provinceId = [dict objectForKey:@"provinceId"];
  441. self.cityId = [dict objectForKey:@"cityId"];
  442. self.areaId = [dict objectForKey:@"areaId"];
  443. self.fansCount = [dict objectForKey:@"fansCount"];
  444. self.attCount = [dict objectForKey:@"attCount"];
  445. self.level = [dict objectForKey:@"level"];
  446. self.vip = [dict objectForKey:@"vip"];
  447. self.notSeeHim = [dict objectForKey:@"notSeeHim"];
  448. self.notLetSeeHim = [dict objectForKey:@"notLetSeeHim"];
  449. self.model = [dict objectForKey:@"model"];
  450. self.osVersion = [dict objectForKey:@"osVersion"];
  451. self.serialNumber = [dict objectForKey:@"serialNumber"];
  452. self.location = [dict objectForKey:@"location"];
  453. // self.latitude = [dict objectForKey:@"latitude"];
  454. // self.longitude = [dict objectForKey:@"longitude"];
  455. self.latitude = [(NSDictionary *)[dict objectForKey:@"loc"] objectForKey:@"lat"];
  456. self.longitude = [(NSDictionary *)[dict objectForKey:@"loc"] objectForKey:@"lng"];
  457. if ([dict objectForKey:@"friends"]) {
  458. self.offlineNoPushMsg = [(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"offlineNoPushMsg"];
  459. self.isOpenReadDel = [(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"isOpenSnapchat"];
  460. long time = [[(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"openTopChatTime"] longLongValue];
  461. self.topTime = [NSDate dateWithTimeIntervalSince1970:time];
  462. self.chatRecordTimeOut = [NSString stringWithFormat:@"%@", [(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"chatRecordTimeOut"]];
  463. self.veryCare = [(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"veryCare"];
  464. self.veryCareTones = [(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"veryCareTones"];
  465. }
  466. if ([dict objectForKey:@"member"]) {
  467. long time = [[(NSDictionary *)[dict objectForKey:@"member"] objectForKey:@"openTopChatTime"] longLongValue];
  468. self.topTime = [NSDate dateWithTimeIntervalSince1970:time];
  469. self.offlineNoPushMsg = [(NSDictionary *)[dict objectForKey:@"member"] objectForKey:@"offlineNoPushMsg"];
  470. }
  471. self.talkTime = [dict objectForKey:@"talkTime"];
  472. self.myInviteCode = [dict objectForKey:@"myInviteCode"];
  473. self.setAccountCount = [dict objectForKey:@"setAccountCount"];
  474. self.account = [dict objectForKey:@"account"];
  475. self.publicKeyDH = [dict objectForKey:@"publicKeyDH"];
  476. self.publicKeyRSARoom = [dict objectForKey:@"publicKeyRSARoom"];
  477. self.chatKeyGroup = [dict objectForKey:@"chatKeyGroup"];
  478. }
  479. -(void)getDataFromDictSmall:(NSDictionary*)dict{
  480. self.type = nil;
  481. self.content = nil;
  482. self.timeSend = nil;
  483. self.msgsNew = nil;
  484. self.roomFlag = [NSNumber numberWithInt:0];
  485. self.timeCreate = [dict objectForKey:@"createTime"];
  486. self.status = [dict objectForKey:@"status"];
  487. if ([[dict objectForKey:@"isBeenBlack"] intValue] == 1) {
  488. self.status = [NSNumber numberWithInt:friend_status_hisBlack];
  489. }
  490. self.userType = [dict objectForKey:@"toUserType"];
  491. if ([[dict objectForKey:@"blacklist"] integerValue] == 1) {
  492. self.status = [NSNumber numberWithInt:-1];
  493. }
  494. // if ([dict objectForKey:@"toFriendsRole"]) {
  495. // NSArray *roleDict = [dict objectForKey:@"toFriendsRole"];
  496. // self.role = @([[[roleDict firstObject] objectForKey:@"role"] intValue]);
  497. // }
  498. self.userId = [[dict objectForKey:@"toUserId"] stringValue];
  499. self.remarkName = [dict objectForKey:@"remarkName"];
  500. if ([[dict objectForKey:@"remarkName"] length] > 0) {
  501. self.userNickname = [dict objectForKey:@"remarkName"];
  502. }else {
  503. self.userNickname = [dict objectForKey:@"toNickname"];
  504. }
  505. self.describe = [dict objectForKey:@"describe"];
  506. if ([dict objectForKey:@"companyId"]) {
  507. self.companyId = [dict objectForKey:@"companyId"];
  508. }else {
  509. self.companyId = [NSNumber numberWithInt:0];
  510. }
  511. if ([dict objectForKey:@"chatRecordTimeOut"]) {
  512. self.chatRecordTimeOut = [NSString stringWithFormat:@"%@",[dict objectForKey:@"chatRecordTimeOut"]];
  513. }
  514. if ([dict objectForKey:@"talkTime"]) {
  515. self.talkTime = [dict objectForKey:@"talkTime"];
  516. }
  517. if ([dict objectForKey:@"offlineNoPushMsg"]) {
  518. self.offlineNoPushMsg = [dict objectForKey:@"offlineNoPushMsg"];
  519. }
  520. if ([dict objectForKey:@"veryCare"]) {
  521. self.veryCare = [dict objectForKey:@"veryCare"];
  522. }
  523. if ([dict objectForKey:@"veryCareTones"]) {
  524. self.veryCareTones = [dict objectForKey:@"veryCareTones"];
  525. }
  526. if ([dict objectForKey:@"telephone"]) {
  527. self.telephone = [dict objectForKey:@"telephone"];
  528. }
  529. if ([dict objectForKey:@"openTopChatTime"]) {
  530. long time = [[dict objectForKey:@"openTopChatTime"] longLongValue];
  531. if (time > 0) {
  532. self.topTime = [NSDate dateWithTimeIntervalSince1970:time];
  533. }
  534. }
  535. if ([dict objectForKey:@"dhMsgPublicKey"]) {
  536. self.publicKeyDH = [dict objectForKey:@"dhMsgPublicKey"];
  537. }
  538. if ([dict objectForKey:@"rsaMsgPublicKey"]) {
  539. self.publicKeyRSARoom = [dict objectForKey:@"rsaMsgPublicKey"];
  540. }
  541. if ([dict objectForKey:@"chatKeyGroup"]) {
  542. self.chatKeyGroup = [dict objectForKey:@"chatKeyGroup"];
  543. }
  544. }
  545. -(void)copyFromResume:(resumeBaseData*)resume{
  546. // self.telephone = resume.telephone;
  547. self.userNickname= resume.name;
  548. self.birthday = [NSDate dateWithTimeIntervalSince1970:resume.birthday];
  549. self.sex = [NSNumber numberWithBool:resume.sex];
  550. self.countryId = [NSNumber numberWithInt:resume.countryId];
  551. self.provinceId = [NSNumber numberWithInt:resume.provinceId];
  552. self.cityId = [NSNumber numberWithInt:resume.cityId];
  553. self.areaId = [NSNumber numberWithInt:resume.areaId];
  554. self.latitude = [NSNumber numberWithDouble:g_server.latitude];
  555. self.longitude = [NSNumber numberWithDouble:g_server.longitude];
  556. }
  557. +(void)deleteUserAndMsg:(NSString*)s{
  558. JXUserObject* p = [[JXUserObject alloc]init];
  559. p.userId = s;
  560. [p notifyDelFriend];
  561. [p delete];
  562. // [p release];
  563. JXMessageObject* m = [[JXMessageObject alloc]init];
  564. m.fromUserId = MY_USER_ID;
  565. m.toUserId = s;
  566. [m deleteAll];
  567. // [m release];
  568. }
  569. +(BOOL)updateNewMsgsTo0{
  570. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
  571. BOOL worked=[db executeUpdate:[NSString stringWithFormat:@"update friend set newMsgs=0"]];
  572. return worked;
  573. }
  574. -(void)copyFromRoomMember:(memberData*)p{
  575. self.userId = [NSString stringWithFormat:@"%ld",p.userId];
  576. self.userNickname = p.userNickName;
  577. }
  578. // 更新最后输入
  579. - (BOOL) updateLastInput {
  580. NSString* myUserId = MY_USER_ID;
  581. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  582. [self checkTableCreatedInDb:db];
  583. NSString* sql = [NSString stringWithFormat:@"update %@ set lastInput=? where userId=?",_tableName];
  584. BOOL worked = [db executeUpdate:sql,self.lastInput,self.userId];
  585. return worked;
  586. }
  587. // 更新消息界面显示的最后一条消息
  588. - (BOOL) updateLastContent {
  589. NSString* myUserId = MY_USER_ID;
  590. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  591. [self checkTableCreatedInDb:db];
  592. NSString* sql = [NSString stringWithFormat:@"update %@ set content=? where userId=?",_tableName];
  593. BOOL worked = [db executeUpdate:sql,self.content,self.userId];
  594. return worked;
  595. }
  596. +(NSString*)getUserNameWithUserId:(NSString*)userId{
  597. if(userId==nil)
  598. return nil;
  599. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
  600. //获取用户名
  601. NSString* sql= [NSString stringWithFormat:@"select userNickname from friend where userId=%@",userId];
  602. FMResultSet *rs=[db executeQuery:sql];
  603. if([rs next]) {
  604. NSString* s = [rs objectForColumnName:@"userNickname"];
  605. return s;
  606. }
  607. return nil;
  608. }
  609. +(NSMutableArray *)getUserNameWithUserIdsArray:(NSArray *)userIdsArray{
  610. if (userIdsArray.count == 0) {
  611. return nil;
  612. }
  613. NSMutableArray *userNamesArray = [NSMutableArray array];
  614. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
  615. //获取用户名
  616. for (NSInteger i = 0; i < userIdsArray.count; i++) {
  617. NSString *userId = userIdsArray[i];
  618. NSString* sql= [NSString stringWithFormat:@"select userNickname from friend where userId=%@",userId];
  619. FMResultSet *rs=[db executeQuery:sql];
  620. if([rs next]) {
  621. NSString* s = [rs objectForColumnName:@"userNickname"];
  622. if (!s) {
  623. s = @"";
  624. }
  625. [userNamesArray addObject:s];
  626. }
  627. }
  628. if (userNamesArray.count > 0) {
  629. return userNamesArray;
  630. }
  631. return nil;
  632. }
  633. // 更新置顶时间
  634. - (BOOL) updateTopTime {
  635. NSString* myUserId = MY_USER_ID;
  636. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  637. [self checkTableCreatedInDb:db];
  638. NSString* sql = [NSString stringWithFormat:@"update %@ set topTime=? where userId=?",_tableName];
  639. BOOL worked = [db executeUpdate:sql,self.topTime,self.userId];
  640. return worked;
  641. }
  642. // 更新群组有效性
  643. - (BOOL) updateGroupInvalid {
  644. NSString* myUserId = MY_USER_ID;
  645. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  646. [self checkTableCreatedInDb:db];
  647. NSString* sql = [NSString stringWithFormat:@"update %@ set groupStatus=? where userId=?",_tableName];
  648. BOOL worked = [db executeUpdate:sql,self.groupStatus,self.userId];
  649. return worked;
  650. }
  651. // 更新用户昵称
  652. - (BOOL) updateUserNickname {
  653. NSString* myUserId = MY_USER_ID;
  654. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  655. [self checkTableCreatedInDb:db];
  656. NSString *nickName;
  657. if (self.remarkName.length > 0) {
  658. nickName = self.userNickname;
  659. }else {
  660. nickName = self.userNickname;
  661. }
  662. NSString* sql = [NSString stringWithFormat:@"update %@ set userNickname=? where userId=?",_tableName];
  663. BOOL worked = [db executeUpdate:sql,nickName,self.userId];
  664. return worked;
  665. }
  666. // 更新群groupType
  667. - (BOOL) updateGroupType {
  668. NSString* myUserId = MY_USER_ID;
  669. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  670. [self checkTableCreatedInDb:db];
  671. NSString* sql = [NSString stringWithFormat:@"update %@ set groupType=? where userId=?",_tableName];
  672. BOOL worked = [db executeUpdate:sql,self.groupType,self.userId];
  673. return worked;
  674. }
  675. // 更新群roomId
  676. - (BOOL) updateRoomId {
  677. NSString* myUserId = MY_USER_ID;
  678. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  679. [self checkTableCreatedInDb:db];
  680. NSString* sql = [NSString stringWithFormat:@"update %@ set roomId=? where userId=?",_tableName];
  681. BOOL worked = [db executeUpdate:sql,self.roomId,self.userId];
  682. return worked;
  683. }
  684. // 更新用户备注
  685. - (BOOL) updateRemarkName {
  686. NSString* myUserId = MY_USER_ID;
  687. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  688. [self checkTableCreatedInDb:db];
  689. NSString* sql = [NSString stringWithFormat:@"update %@ set remarkName=? where userId=?",_tableName];
  690. BOOL worked = [db executeUpdate:sql,self.remarkName,self.userId];
  691. return worked;
  692. }
  693. // 更新用户电话
  694. - (BOOL) updateTelephone {
  695. NSString* myUserId = MY_USER_ID;
  696. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  697. [self checkTableCreatedInDb:db];
  698. NSString* sql = [NSString stringWithFormat:@"update %@ set telephone=? where userId=?",_tableName];
  699. BOOL worked = [db executeUpdate:sql,self.telephone,self.userId];
  700. return worked;
  701. }
  702. // 更新用户聊天记录过期时间
  703. - (BOOL) updateUserChatRecordTimeOut {
  704. NSString* myUserId = MY_USER_ID;
  705. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  706. [self checkTableCreatedInDb:db];
  707. NSString* sql = [NSString stringWithFormat:@"update %@ set chatRecordTimeOut=? where userId=?",_tableName];
  708. BOOL worked = [db executeUpdate:sql,self.chatRecordTimeOut,self.userId];
  709. return worked;
  710. }
  711. // 更新列表最近一条消息记录
  712. - (BOOL) updateUserLastChatList:(NSArray *)array {
  713. NSMutableArray *userArray = [NSMutableArray array];
  714. for (NSInteger i = 0; i < array.count; i ++) {
  715. NSDictionary *dict = array[i];
  716. NSString *dicJid=dict[@"jid"];
  717. //修改了修改了 //||dicJid.length>=10
  718. if ([g_xmpp.blackList containsObject:dict[@"jid"]]) {
  719. continue;
  720. }
  721. JXUserObject *user = [[JXUserObject sharedInstance] getUserById:dict[@"jid"]];
  722. NSNumber *isEncrypt = dict[@"isEncrypt"];
  723. NSString *messageId = dict[@"messageId"];
  724. long timeSend = [dict[@"timeSend"] longLongValue];
  725. NSString *content = dict[@"content"];
  726. if ([current_chat_userId isEqualToString:user.userId]) {
  727. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  728. [g_notify postNotificationName:kChatVCMessageSync object:@(timeSend)];
  729. });
  730. }
  731. content = [self getLastListContent:dict];
  732. if ([isEncrypt boolValue]) {
  733. NSMutableString *str = [NSMutableString string];
  734. [str appendString:APIKEY];
  735. [str appendString:[NSString stringWithFormat:@"%ld",timeSend]];
  736. [str appendString:messageId];
  737. NSString *keyStr = [g_server getMD5String:str];
  738. content = [DESUtil decryptDESStr:content key:keyStr];
  739. }else{
  740. content = content;
  741. }
  742. user.content = content;
  743. user.type = dict[@"type"];
  744. user.timeSend = [NSDate dateWithTimeIntervalSince1970:timeSend / 1000.0];
  745. if (user) {
  746. if (user.content.length > 0) {
  747. [user update];
  748. [userArray addObject:user];
  749. }
  750. }else {
  751. user = [[JXUserObject alloc] init];
  752. user.content = content;
  753. user.type = dict[@"type"];
  754. if ([dict[@"isRoom"] boolValue]) {
  755. user.roomFlag= [NSNumber numberWithInt:1];
  756. user.companyId= [NSNumber numberWithInt:0];
  757. user.status= [NSNumber numberWithInt:2];
  758. user.offlineNoPushMsg = [NSNumber numberWithInt:0];
  759. user.isAtMe = [NSNumber numberWithInt:0];
  760. }
  761. user.timeSend = [NSDate dateWithTimeIntervalSince1970:timeSend];
  762. user.userId = dict[@"jid"];
  763. user.userNickname = dict[@"toUserName"];
  764. [user insert];
  765. }
  766. }
  767. [self updateLastListContent:userArray withTransaction:YES];
  768. return YES;
  769. }
  770. - (void)updateLastListContent:(NSArray *)dataArray withTransaction:(BOOL )useTransaction{
  771. NSString* myUserId = MY_USER_ID;
  772. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  773. [self checkTableCreatedInDb:db];
  774. if (useTransaction) {
  775. [db beginTransaction];
  776. BOOL isRollBack = NO;
  777. @try {
  778. for (NSInteger i = 0; i < dataArray.count; i++) {
  779. JXUserObject *user = dataArray[i];
  780. if (user.roomId.length > 0) {
  781. user.roomFlag= [NSNumber numberWithInt:1];
  782. user.companyId= [NSNumber numberWithInt:0];
  783. if (!user.status) {
  784. user.status= [NSNumber numberWithInt:2];
  785. }
  786. }
  787. if(!user.timeSend)
  788. user.timeSend = [NSDate date];
  789. if (!user.companyId) {
  790. user.companyId = [NSNumber numberWithInt:0];
  791. }
  792. if ([user.userId intValue] == [SHIKU_TRANSFER intValue]) {
  793. user.userNickname = Localized(@"JX_PaymentNo.");
  794. }
  795. if ([user.topTime timeIntervalSince1970] > 0) {
  796. user.topTime = self.topTime;
  797. }else {
  798. user.topTime = nil;
  799. }
  800. NSString* sql = [NSString stringWithFormat:@"update %@ set userNickname=?,remarkName=?,describe=?,role=?,userDescription=?,userHead=?,roomFlag=?,type=?,companyId=?,content=?,timeCreate=?,status=?,userType=?,isMySend=?,newMsgs=?,timeSend=?,downloadTime=?,roomId=?,showRead=?,showMember=?,allowSendCard=?,allowInviteFriend=?,allowUploadFile=?,allowConference=?,allowSpeakCourse=?,isNeedVerify=?,topTime=?,groupStatus=?,isOnLine=?,isOpenReadDel=?,isSendRecipt=?,isDevice=?,chatRecordTimeOut=?,offlineNoPushMsg=?,isAtMe=?,talkTime=?,joinTime=? where userId=?",_tableName];
  801. [db executeUpdate:sql,user.userNickname,user.remarkName,user.describe,user.role,user.userDescription,user.userHead,user.roomFlag,user.type,user.companyId,user.content,user.timeCreate,user.status,user.userType,user.isMySend,user.msgsNew,user.timeSend,user.downloadTime,user.roomId,user.showRead,user.showMember,user.allowSendCard,user.allowInviteFriend,user.allowUploadFile,user.allowConference,user.allowSpeakCourse,user.isNeedVerify,user.topTime,user.groupStatus,user.isOnLine,user.isOpenReadDel,user.isSendRecipt,user.isDevice,user.chatRecordTimeOut,user.offlineNoPushMsg,user.isAtMe,user.talkTime,user.joinTime,user.userId];
  802. }
  803. } @catch (NSException *exception) {
  804. isRollBack = YES;
  805. [db rollback];
  806. } @finally {
  807. if (!isRollBack) {
  808. [db commit];
  809. [db close];
  810. [g_App copyDbWithUserId:MY_USER_ID];
  811. }else{
  812. [db close];
  813. [self updateLastListContent:dataArray withTransaction:NO];
  814. }
  815. }
  816. }else{
  817. for (NSInteger i = 0; i < dataArray.count; i++) {
  818. JXUserObject *user = dataArray[i];
  819. if(!user.timeSend)
  820. user.timeSend = [NSDate date];
  821. if (!user.companyId) {
  822. user.companyId = [NSNumber numberWithInt:0];
  823. }
  824. if ([user.userId intValue] == [SHIKU_TRANSFER intValue]) {
  825. user.userNickname = Localized(@"JX_PaymentNo.");
  826. }
  827. if ([user.topTime timeIntervalSince1970] > 0) {
  828. user.topTime = self.topTime;
  829. }else {
  830. user.topTime = nil;
  831. }
  832. NSString* sql = [NSString stringWithFormat:@"update %@ set userNickname=?,remarkName=?,describe=?,role=?,userDescription=?,userHead=?,roomFlag=?,type=?,companyId=?,content=?,timeCreate=?,status=?,userType=?,isMySend=?,newMsgs=?,timeSend=?,downloadTime=?,roomId=?,showRead=?,showMember=?,allowSendCard=?,allowInviteFriend=?,allowUploadFile=?,allowConference=?,allowSpeakCourse=?,isNeedVerify=?,topTime=?,groupStatus=?,isOnLine=?,isOpenReadDel=?,isSendRecipt=?,isDevice=?,chatRecordTimeOut=?,offlineNoPushMsg=?,isAtMe=?,talkTime=?,joinTime=? where userId=?",_tableName];
  833. BOOL worked = [db executeUpdate:sql,user.userNickname,user.remarkName,user.describe,user.role,user.userDescription,user.userHead,user.roomFlag,user.type,user.companyId,user.content,user.timeCreate,user.status,user.userType,user.isMySend,user.msgsNew,user.timeSend,user.downloadTime,user.roomId,user.showRead,user.showMember,user.allowSendCard,user.allowInviteFriend,user.allowUploadFile,user.allowConference,user.allowSpeakCourse,user.isNeedVerify,user.topTime,user.groupStatus,user.isOnLine,user.isOpenReadDel,user.isSendRecipt,user.isDevice,user.chatRecordTimeOut,user.offlineNoPushMsg,user.isAtMe,user.talkTime,user.joinTime,user.userId];
  834. if (!worked) {
  835. NSLog(@"存失败");
  836. }
  837. }
  838. [db close];
  839. [g_App copyDbWithUserId:MY_USER_ID];
  840. }
  841. }
  842. - (NSString *)getLastListContent:(NSDictionary *)dict {
  843. int type = [dict[@"type"] intValue];
  844. NSString *content = dict[@"content"];
  845. NSString *fromUserId = dict[@"from"];
  846. NSString *fromUserName = dict[@"fromUserName"];
  847. if (!fromUserName) {
  848. fromUserName = @"";
  849. }
  850. NSString *toUserId = dict[@"to"];
  851. NSString *toUserName = dict[@"toUserName"];
  852. if (!toUserName) {
  853. toUserName = @"";
  854. }
  855. switch (type) {
  856. case kWCMessageTypeWithdraw:{
  857. if ([dict[@"isRoom"] boolValue]) {
  858. if ([fromUserId isEqualToString:MY_USER_ID]) {
  859. content = Localized(@"JX_AlreadyWithdraw");
  860. }else {
  861. content = [NSString stringWithFormat:@"%@ %@",fromUserName, Localized(@"JX_OtherWithdraw")];
  862. }
  863. }else {
  864. if ([fromUserId isEqualToString:MY_USER_ID]) {
  865. content = Localized(@"JX_AlreadyWithdraw");
  866. }else {
  867. content = [NSString stringWithFormat:@"%@ %@",fromUserName, Localized(@"JX_OtherWithdraw")];
  868. }
  869. }
  870. }
  871. break;
  872. case kWCMessageTypeShare:
  873. content = [NSString stringWithFormat:@"[%@]",Localized(@"JXLink")];
  874. break;
  875. case kWCMessageTypeRedPacketReceive:
  876. content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXRed_whoGet")];
  877. break;
  878. case kWCMessageTypeRedPacketReturn:
  879. content = [NSString stringWithFormat:@"%@",Localized(@"JX_ RedEnvelopeExpired")];
  880. break;
  881. case kWCMessageTypeGroupFileUpload:
  882. content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXMessage_fileUpload")];
  883. break;
  884. case kWCMessageTypeGroupFileDelete:
  885. content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXMessage_fileDelete")];
  886. break;
  887. case kWCMessageTypeGroupFileDownload:
  888. content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXMessage_fileDownload")];
  889. break;
  890. case kRoomRemind_RoomName:
  891. content = [NSString stringWithFormat:@"%@%@%@",fromUserName,Localized(@"JXMessageObject_UpdateRoomName"),content];
  892. break;
  893. case kRoomRemind_NickName:{
  894. content = [NSString stringWithFormat:@"%@%@%@",fromUserName,Localized(@"JXMessageObject_UpdateNickName"),content];
  895. }
  896. break;
  897. case kRoomRemind_DelRoom:
  898. if ([toUserId isEqualToString:MY_USER_ID]) {
  899. content = [NSString stringWithFormat:Localized(@"JX_DissolutionGroup"),fromUserName];
  900. }else {
  901. content = [NSString stringWithFormat:@"%@%@:%@",fromUserName,Localized(@"JXMessage_delRoom"),content];
  902. }
  903. break;
  904. case kRoomRemind_AddMember:
  905. if([toUserId isEqualToString:fromUserId])
  906. content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXMessageObject_GroupChat")];
  907. else
  908. content = [NSString stringWithFormat:@"%@%@%@",fromUserName,Localized(@"JXMessageObject_InterFriend"),toUserName];
  909. break;
  910. case kLiveRemind_ExitRoom:
  911. if([toUserId isEqualToString:fromUserId]){
  912. content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"EXITED_LIVE_ROOM")];//退出
  913. }else{
  914. content = [NSString stringWithFormat:@"%@%@",toUserName,Localized(@"JX_LiveVC_kickLive")];//被踢出
  915. }
  916. break;
  917. case kRoomRemind_DelMember:
  918. if([toUserId isEqualToString:fromUserId]){
  919. content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXMessageObject_OutGroupChat")];
  920. }else{
  921. if ([toUserId isEqualToString:MY_USER_ID]) {
  922. content = [NSString stringWithFormat:Localized(@"JX_OutOfTheGroup"),fromUserName];
  923. }else {
  924. if ([fromUserName isEqualToString:toUserName]) {
  925. content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXRoomMemberVC_OutPutRoom")];
  926. }else {
  927. content = [NSString stringWithFormat:@"%@%@%@",fromUserName,Localized(@"JXMessageObject_KickOut"),toUserName];
  928. }
  929. }
  930. }
  931. break;
  932. case kRoomRemind_NewNotice:
  933. content = [NSString stringWithFormat:@"%@%@%@",fromUserName,Localized(@"JXMessageObject_AddNewAdv"),content];
  934. break;
  935. case kLiveRemind_ShatUp:
  936. case kRoomRemind_DisableSay:{
  937. if([content longLongValue]==0){
  938. content = [NSString stringWithFormat:@"%@%@%@%@",fromUserName,Localized(@"JXMessageObject_Yes"),toUserName,Localized(@"JXMessageObject_CancelGag")];
  939. }else{
  940. NSDate* d = [NSDate dateWithTimeIntervalSince1970:[content longLongValue]];
  941. NSString* t = [TimeUtil formatDate:d format:@"MM-dd HH:mm"];
  942. content = [NSString stringWithFormat:@"%@%@%@%@%@",fromUserName,Localized(@"JXMessageObject_Yes"),toUserName,Localized(@"JXMessageObject_SetGagWithTime"),t];
  943. d = nil;
  944. }
  945. break;
  946. }
  947. case kLiveRemind_SetManager:
  948. case kRoomRemind_SetManage:{
  949. if ([content integerValue] == 1) {
  950. content = [NSString stringWithFormat:@"%@%@%@%@",Localized(@"JXGroup_Owner"),Localized(@"JXSettingVC_Set"),toUserName,Localized(@"JXMessage_admin")];
  951. }else {
  952. content = [NSString stringWithFormat:@"%@%@%@",Localized(@"JXGroup_Owner"),Localized(@"CANCEL_ADMINISTRATOR"),toUserName];
  953. }
  954. break;
  955. }
  956. case kRoomRemind_EnterLiveRoom:{
  957. content = [NSString stringWithFormat:@"%@%@",toUserName,Localized(@"Enter_LiveRoom")];//加入房间消息
  958. break;
  959. }
  960. case kRoomRemind_ShowRead:{
  961. if ([content integerValue] == 1)
  962. content = [NSString stringWithFormat:@"%@%@%@",Localized(@"JXGroup_Owner"),Localized(@"JX_Enable"),Localized(@"JX_RoomReadMode")];
  963. else
  964. content = [NSString stringWithFormat:@"%@%@%@",Localized(@"JXGroup_Owner"),Localized(@"JX_Disable"),Localized(@"JX_RoomReadMode")];
  965. break;
  966. }
  967. case kRoomRemind_NeedVerify:{
  968. if (!content || content.length <= 0) {
  969. content = Localized(@"JX_GroupInvitationConfirmation");
  970. }else {
  971. if ([content integerValue] == 1)
  972. content = Localized(@"JX_GroupOwnersOpenValidation");
  973. else
  974. content = Localized(@"JX_GroupOwnersCloseValidation");
  975. }
  976. break;
  977. }
  978. case kRoomRemind_IsLook:{
  979. if ([content integerValue] == 0)
  980. content = Localized(@"JX_GroupOwnersPublicGroup");
  981. else
  982. content = Localized(@"JX_GroupOwnersPrivateGroup");
  983. break;
  984. }
  985. case kRoomRemind_ShowMember:{
  986. if ([content integerValue] == 1)
  987. content = Localized(@"JX_GroupOwnersShowMembers");
  988. else
  989. content = Localized(@"JX_GroupOwnersNotShowMembers");
  990. break;
  991. }
  992. case kRoomRemind_allowSendCard:{
  993. if ([content integerValue] == 1)
  994. content = Localized(@"JX_ManagerOpenChat");
  995. else
  996. content = Localized(@"JX_ManagerOffChat");
  997. break;
  998. }
  999. case kRoomRemind_RoomAllBanned:{
  1000. if ([content integerValue] > 0)
  1001. content = Localized(@"JX_ManagerOpenSilence");
  1002. else
  1003. content = Localized(@"JX_ManagerOffSilence");
  1004. break;
  1005. }
  1006. case kRoomRemind_RoomAllowInviteFriend:{
  1007. if ([content integerValue] > 0)
  1008. content = Localized(@"JX_ManagerOpenInviteFriends");
  1009. else
  1010. content = Localized(@"JX_ManagerOffInviteFriends");
  1011. break;
  1012. }
  1013. case kRoomRemind_RoomAllowUploadFile:{
  1014. if ([content integerValue] > 0)
  1015. content = Localized(@"JX_ManagerOpenSharedFiles");
  1016. else
  1017. content = Localized(@"JX_ManagerOffSharedFiles");
  1018. break;
  1019. }
  1020. case kRoomRemind_RoomAllowConference:{
  1021. if ([content integerValue] > 0)
  1022. content = Localized(@"JX_ManagerOpenMeetings");
  1023. else
  1024. content = Localized(@"JX_ManagerOffMeetings");
  1025. break;
  1026. }
  1027. case kRoomRemind_RoomAllowSpeakCourse:{
  1028. if ([content integerValue] > 0)
  1029. content = Localized(@"JX_ManagerOpenLectures");
  1030. else
  1031. content = Localized(@"JX_ManagerOffLectures");
  1032. break;
  1033. }
  1034. case kRoomRemind_RoomTransfer:{
  1035. content = [NSString stringWithFormat:@"\"%@\"%@", toUserName,Localized(@"JX_NewGroupManager")];
  1036. break;
  1037. }
  1038. case kRoomRemind_SetInvisible:{
  1039. if ([content integerValue] == 1) {
  1040. content = [NSString stringWithFormat:@"%@%@%@%@",fromUserName,Localized(@"JXSettingVC_Set"),toUserName,Localized(@"JX_ForTheInvisibleMan")];
  1041. }else if ([content integerValue] == -1){
  1042. content = [NSString stringWithFormat:@"%@%@%@",fromUserName,Localized(@"JX_EliminateTheInvisible"),toUserName];
  1043. }else if ([content integerValue] == 2){
  1044. content = [NSString stringWithFormat:@"%@%@%@%@",fromUserName,Localized(@"JXSettingVC_Set"),toUserName,@"为监控人"];
  1045. }else if ([content integerValue] == 0){
  1046. content = [NSString stringWithFormat:@"%@%@%@",fromUserName,@"取消监控人",toUserName];
  1047. }
  1048. break;
  1049. }
  1050. case kRoomRemind_RoomDisable:{
  1051. if ([content integerValue] == 1) {
  1052. content = [NSString stringWithFormat:@"%@",Localized(@"JX_ThisGroupHasBeenDisabled")];
  1053. }else {
  1054. content = [NSString stringWithFormat:@"%@",Localized(@"JX_GroupNotUse")];
  1055. }
  1056. break;
  1057. }
  1058. case kRoomRemind_SetRecordTimeOut:{
  1059. NSArray *pickerArr = @[Localized(@"JX_Forever"), Localized(@"JX_OneHour"), Localized(@"JX_OneDay"), Localized(@"JX_OneWeeks"), Localized(@"JX_OneMonth"), Localized(@"JX_OneQuarter"), Localized(@"JX_OneYear")];
  1060. double outTime = [content doubleValue];
  1061. NSString *str;
  1062. if (outTime <= 0) {
  1063. str = pickerArr[0];
  1064. }else if (outTime == 0.04) {
  1065. str = pickerArr[1];
  1066. }else if (outTime == 1) {
  1067. str = pickerArr[2];
  1068. }else if (outTime == 7) {
  1069. str = pickerArr[3];
  1070. }else if (outTime == 30) {
  1071. str = pickerArr[4];
  1072. }else if (outTime == 90) {
  1073. str = pickerArr[5];
  1074. }else{
  1075. str = pickerArr[6];
  1076. }
  1077. content = [NSString stringWithFormat:@"%@%@",Localized(@"JX_GroupManagerSetMsgDelTime"),str];
  1078. }
  1079. default:
  1080. break;
  1081. }
  1082. return content;
  1083. }
  1084. // 更新群组全员禁言时间
  1085. - (BOOL) updateGroupTalkTime {
  1086. NSString* myUserId = MY_USER_ID;
  1087. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1088. [self checkTableCreatedInDb:db];
  1089. NSString* sql = [NSString stringWithFormat:@"update %@ set talkTime=? where userId=?",_tableName];
  1090. BOOL worked = [db executeUpdate:sql,self.talkTime,self.userId];
  1091. return worked;
  1092. }
  1093. // 更新是否开启阅后即焚标志
  1094. - (BOOL) updateIsOpenReadDel {
  1095. NSString* myUserId = MY_USER_ID;
  1096. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1097. [self checkTableCreatedInDb:db];
  1098. NSString* sql = [NSString stringWithFormat:@"update %@ set isOpenReadDel=? where userId=?",_tableName];
  1099. BOOL worked = [db executeUpdate:sql,self.isOpenReadDel,self.userId];
  1100. return worked;
  1101. }
  1102. // 更新消息免打扰
  1103. - (BOOL) updateOfflineNoPushMsg {
  1104. NSString* myUserId = MY_USER_ID;
  1105. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1106. [self checkTableCreatedInDb:db];
  1107. NSString* sql = [NSString stringWithFormat:@"update %@ set offlineNoPushMsg=? where userId=?",_tableName];
  1108. BOOL worked = [db executeUpdate:sql,self.offlineNoPushMsg,self.userId];
  1109. return worked;
  1110. }
  1111. // 更新@我
  1112. - (BOOL) updateIsAtMe{
  1113. NSString* myUserId = MY_USER_ID;
  1114. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1115. [self checkTableCreatedInDb:db];
  1116. NSString* sql = [NSString stringWithFormat:@"update %@ set isAtMe=? where userId=?",_tableName];
  1117. BOOL worked = [db executeUpdate:sql,self.isAtMe,self.userId];
  1118. return worked;
  1119. }
  1120. // 更新userType
  1121. - (BOOL) updateUserType {
  1122. NSString* myUserId = MY_USER_ID;
  1123. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1124. [self checkTableCreatedInDb:db];
  1125. NSString* sql = [NSString stringWithFormat:@"update %@ set userType=? where userId=?",_tableName];
  1126. BOOL worked = [db executeUpdate:sql,self.userType,self.userId];
  1127. return worked;
  1128. }
  1129. // 更新创建者
  1130. - (BOOL)updateCreateUser {
  1131. NSString* myUserId = MY_USER_ID;
  1132. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1133. [self checkTableCreatedInDb:db];
  1134. NSString* sql = [NSString stringWithFormat:@"update %@ set createUserId=? where userId=?",_tableName];
  1135. BOOL worked = [db executeUpdate:sql,self.createUserId,self.userId];
  1136. return worked;
  1137. }
  1138. // 更新群组设置
  1139. - (BOOL)updateGroupSetting {
  1140. NSString* myUserId = MY_USER_ID;
  1141. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1142. [self checkTableCreatedInDb:db];
  1143. NSString* sql = [NSString stringWithFormat:@"update %@ set showRead=?,allowSendCard=?,allowConference=?,allowSpeakCourse=?,isNeedVerify=?,talkTime=? where userId=?",_tableName];
  1144. BOOL worked = [db executeUpdate:sql,self.showRead,self.allowSendCard,self.allowConference,self.allowSpeakCourse,self.isNeedVerify,self.talkTime,self.userId];
  1145. return worked;
  1146. }
  1147. // 更新好友关系
  1148. - (BOOL)updateStatus {
  1149. NSString* myUserId = MY_USER_ID;
  1150. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1151. [self checkTableCreatedInDb:db];
  1152. NSString* sql = [NSString stringWithFormat:@"update %@ set status=? where userId=?",_tableName];
  1153. BOOL worked = [db executeUpdate:sql,self.status,self.userId];
  1154. return worked;
  1155. }
  1156. // 更新新消息数量
  1157. - (BOOL)updateNewMsgNum {
  1158. NSString* myUserId = MY_USER_ID;
  1159. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1160. [self checkTableCreatedInDb:db];
  1161. NSString* sql = [NSString stringWithFormat:@"update %@ set newMsgs=? where userId=?",_tableName];
  1162. BOOL worked = [db executeUpdate:sql,self.msgsNew,self.userId];
  1163. return worked;
  1164. }
  1165. // 更新我的设备是否在线
  1166. - (BOOL)updateIsOnLine {
  1167. NSString* myUserId = MY_USER_ID;
  1168. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1169. [self checkTableCreatedInDb:db];
  1170. NSString* sql = [NSString stringWithFormat:@"update %@ set isOnLine=? where userId=?",_tableName];
  1171. BOOL worked = [db executeUpdate:sql,self.isOnLine,self.userId];
  1172. return worked;
  1173. }
  1174. // 更新群组最后群成员加入时间
  1175. - (BOOL)updateJoinTime {
  1176. NSString* myUserId = MY_USER_ID;
  1177. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1178. [self checkTableCreatedInDb:db];
  1179. NSString* sql = [NSString stringWithFormat:@"update %@ set joinTime=? where userId=?",_tableName];
  1180. BOOL worked = [db executeUpdate:sql,self.joinTime,self.userId];
  1181. return worked;
  1182. }
  1183. // 删除用户过期聊天记录
  1184. - (BOOL) deleteUserChatRecordTimeOutMsg {
  1185. NSMutableArray *array = [[JXMessageObject sharedInstance] fetchRecentChat];
  1186. for (NSInteger i = 0; i < array.count; i ++) {
  1187. JXMsgAndUserObject *userObj = array[i];
  1188. [[JXMessageObject sharedInstance] deleteTimeOutMsg:userObj.user.userId chatRecordTimeOut:userObj.user.chatRecordTimeOut];
  1189. }
  1190. return YES;
  1191. }
  1192. - (BOOL) deleteAllUser {
  1193. NSString* myUserId = MY_USER_ID;
  1194. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1195. [self checkTableCreatedInDb:db];
  1196. NSString *sql = [NSString stringWithFormat:@"delete from %@ where length(userId) > 5 and length(userId) < 10",_tableName];
  1197. BOOL worked=[db executeUpdate:sql,self.userId];
  1198. return worked;
  1199. }
  1200. // 清除所有黑名单好友
  1201. - (BOOL)deleteAllBlackUser {
  1202. NSString* myUserId = MY_USER_ID;
  1203. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1204. [self checkTableCreatedInDb:db];
  1205. NSString *sql = [NSString stringWithFormat:@"delete from %@ where status=-1",_tableName];
  1206. BOOL worked=[db executeUpdate:sql];
  1207. return worked;
  1208. }
  1209. //插入已拨打的电话号码
  1210. - (BOOL) insertPhone:(NSString *)phone time:(NSDate *)time {
  1211. NSString* myUserId = MY_USER_ID;
  1212. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1213. [self checkPhoneTableCreatedInDb:db];
  1214. FMResultSet * rs = [db executeQuery:[NSString stringWithFormat:@"select * from telePhone where phone=?"],phone];
  1215. BOOL flag = NO;
  1216. if([rs next]) {
  1217. flag = YES;
  1218. }
  1219. // FMDBQuickCheck(worked);
  1220. if (!flag) {
  1221. NSString *insertStr=[NSString stringWithFormat:@"INSERT INTO '%@' ('phone','time') VALUES (?,?)",@"telePhone"];
  1222. BOOL worked = [db executeUpdate:insertStr,phone, time];
  1223. return worked;
  1224. }
  1225. return YES;
  1226. }
  1227. // 删除已拨打的电话号码
  1228. - (BOOL) deletePhone:(NSString *)phone {
  1229. NSString* myUserId = MY_USER_ID;
  1230. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1231. [self checkPhoneTableCreatedInDb:db];
  1232. BOOL worked = [db executeUpdate:[NSString stringWithFormat:@"delete from telePhone where phone=?"],phone];
  1233. return worked;
  1234. }
  1235. - (NSMutableDictionary *) getPhoneDic {
  1236. NSString* myUserId = MY_USER_ID;
  1237. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1238. [self checkPhoneTableCreatedInDb:db];
  1239. NSString* sql = [NSString stringWithFormat:@"select * from telePhone"];
  1240. FMResultSet *rs = [db executeQuery:sql];
  1241. NSMutableDictionary *dict = [NSMutableDictionary dictionary];
  1242. while ([rs next]) {
  1243. [dict setObject:[rs dateForColumn:@"time"] forKey:[rs stringForColumn:@"phone"]];
  1244. }
  1245. return dict;
  1246. }
  1247. -(BOOL)checkPhoneTableCreatedInDb:(FMDatabase *)db
  1248. {
  1249. NSString *createStr=[NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@' ('phone' VARCHAR, 'time' DATETIME)",@"telePhone"];
  1250. BOOL worked = [db executeUpdate:createStr];
  1251. // FMDBQuickCheck(worked);
  1252. return worked;
  1253. }
  1254. // 更新好友DH公钥和RSA公钥
  1255. - (BOOL)updateDHPublicKeyAndRSAPublicKey {
  1256. NSString* myUserId = MY_USER_ID;
  1257. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1258. [self checkTableCreatedInDb:db];
  1259. NSString* sql = [NSString stringWithFormat:@"update %@ set publicKeyDH=?,publicKeyRSARoom=? where userId=?",_tableName];
  1260. BOOL worked = [db executeUpdate:sql,self.publicKeyDH,self.publicKeyRSARoom,self.userId];
  1261. return worked;
  1262. }
  1263. //查找好友
  1264. - (NSMutableArray *)searchContacts:(NSString *)searchtext{
  1265. NSString *sql = [NSString stringWithFormat:@"select * from friend where (status=2 and companyId=0 and roomFlag=0 and isDevice=0) and ((userNickname like '%%%@%%') or (userId like '%%%@%%')) order by timeCreate",searchtext,searchtext];
  1266. return [self doFetch:sql];
  1267. }
  1268. //查找群组昵称
  1269. - (NSMutableArray *)searchGroup:(NSString *)searchtext withContent:(NSString *)content{
  1270. NSString *sql = [NSString stringWithFormat:@"select * from friend where roomFlag=1 and %@ like '%%%@%%' order by timeCreate",content,searchtext];
  1271. return [self doFetch:sql];
  1272. }
  1273. //查找成员
  1274. - (NSMutableArray *)searchGroupMember:(NSString *)searchtext{
  1275. NSString *sql = [NSString stringWithFormat:@"select * from friend where roomFlag=1"];
  1276. NSMutableArray *array = [self doFetch:sql];
  1277. NSMutableArray *roomIdArray = [NSMutableArray array];
  1278. for (JXUserObject *user in array) {
  1279. [roomIdArray addObject:user.roomId];
  1280. }
  1281. NSMutableArray *searchArray = [NSMutableArray array];
  1282. for (NSInteger i = 0; i<roomIdArray.count; i++) {
  1283. memberData *member = [memberData fetchMembersWithText:searchtext withRoomId:roomIdArray[i]];
  1284. if (member != nil) {
  1285. [searchArray addObject:member];
  1286. }
  1287. }
  1288. return searchArray;
  1289. }
  1290. //根据roomId查找群组
  1291. - (JXUserObject *)groupForRoomId:(NSString *)roomId{
  1292. NSString *sql = [NSString stringWithFormat:@"select * from friend where roomFlag=1 and roomId='%@'",roomId];
  1293. return [self doFetchOneGroup:sql];
  1294. }
  1295. - (JXUserObject *)doFetchOneGroup:(NSString*)sql
  1296. { JXUserObject *group = [[JXUserObject alloc] init];
  1297. NSString* myUserId = MY_USER_ID;
  1298. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1299. [super checkTableCreatedInDb:db];
  1300. FMResultSet *rs=[db executeQuery:sql];
  1301. while ([rs next]) {
  1302. JXUserObject *user=[[JXUserObject alloc] init];
  1303. [super userFromDataset:user rs:rs];
  1304. group = user;
  1305. }
  1306. [rs close];
  1307. return group;
  1308. }
  1309. //获取公众号
  1310. - (NSMutableArray *)searchPublic:(NSString *)searchtext{
  1311. NSString *sql = [NSString stringWithFormat:@"select * from friend where userType=2 and userNickname like '%%%@%%' order by timeCreate",searchtext];
  1312. return [self doFetch:sql];
  1313. }
  1314. //获取联系人和群聊
  1315. - (NSMutableArray *)getAllContactsAndGroup{
  1316. NSString *sql = [NSString stringWithFormat:@"select * from friend where ((status=2 or status=0) and companyId=0 and roomFlag=0 and isDevice=0) or roomFlag = 1 order by timeCreate"];
  1317. return [self doFetch:sql];
  1318. }
  1319. //获取消息
  1320. - (NSMutableDictionary *)searchChatRecordWithText:(NSString *)text{
  1321. NSMutableDictionary *allMsg = [NSMutableDictionary dictionary];
  1322. NSMutableArray<JXUserObject *> *all = [self getAllContactsAndGroup];
  1323. for (NSInteger i = 0; i<all.count; i++) {
  1324. NSMutableArray *array = [self getSearchMsgWithUserId:all[i].userId withSearchText:text];
  1325. [allMsg setObject:array forKey:all[i].userId];
  1326. }
  1327. return allMsg;
  1328. }
  1329. - (NSMutableArray *)getSearchMsgWithUserId:(NSString *)userId withSearchText:(NSString *)searchtext{
  1330. NSString *sql = [NSString stringWithFormat:@"select * from msg_%@ where content like '%%%@%%' and type=1 order by timeSend desc",userId,searchtext];
  1331. NSMutableArray *array = [[NSMutableArray alloc] init];
  1332. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
  1333. FMResultSet *rs=[db executeQuery:sql];
  1334. while ([rs next]) {
  1335. JXMessageObject *p=[[JXMessageObject alloc] init];
  1336. [p fromRs:rs];
  1337. NSString *content = p.content;
  1338. NSMutableArray *contentArray = [NSMutableArray array];
  1339. [self getMessageRange:content :contentArray];
  1340. NSMutableArray *stringArray = [NSMutableArray array];
  1341. _num = 0;
  1342. [self splicingString:contentArray inArray:stringArray];
  1343. for (NSString *object in stringArray) {
  1344. if ([object hasSuffix:@"]"]&&[object hasPrefix:@"["]) {
  1345. }else{
  1346. if ([object localizedCaseInsensitiveContainsString:searchtext]) {
  1347. [array addObject:p];
  1348. break;
  1349. }
  1350. }
  1351. }
  1352. }
  1353. return array;
  1354. }
  1355. // 更新群组秘钥
  1356. - (BOOL)updateChatKeyGroup {
  1357. NSString* myUserId = MY_USER_ID;
  1358. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1359. [self checkTableCreatedInDb:db];
  1360. NSString* sql = [NSString stringWithFormat:@"update %@ set chatKeyGroup=? where userId=?",_tableName];
  1361. BOOL worked = [db executeUpdate:sql,self.chatKeyGroup,self.userId];
  1362. return worked;
  1363. }
  1364. //排除表情包
  1365. - (void)getMessageRange:(NSString*)message :(NSMutableArray*)array {
  1366. NSRange range=[message rangeOfString: @"["];
  1367. NSRange range1=[message rangeOfString: @"]"];
  1368. // 动画过滤
  1369. if ([message isEqualToString:[NSString stringWithFormat:@"[%@]",Localized(@"emojiVC_Emoji")]]) {
  1370. [array addObject:message];
  1371. return;
  1372. }
  1373. //判断当前字符串是否还有表情的标志。
  1374. if (range.length>0 && range1.length>0 && range1.location > range.location) {
  1375. if (range.location > 0) {
  1376. NSString *str = [message substringToIndex:range.location];
  1377. NSString *str1 = [message substringFromIndex:range.location];
  1378. [array addObject:str];
  1379. [self getMessageRange:str1 :array];
  1380. }else {
  1381. NSString *emojiString = [message substringWithRange:NSMakeRange(range.location + 1, range1.location - 1)];
  1382. BOOL isEmoji = NO;
  1383. NSString *str;
  1384. NSString *str1;
  1385. for (NSMutableDictionary *dic in g_constant.emojiArray) {
  1386. NSString *emoji = [dic objectForKey:@"english"];
  1387. if ([emoji isEqualToString:emojiString]) {
  1388. isEmoji = YES;
  1389. break;
  1390. }
  1391. }
  1392. if (isEmoji) {
  1393. str = [message substringWithRange:NSMakeRange(range.location, range1.location + 1)];
  1394. str1 = [message substringFromIndex:range1.location + 1];
  1395. [array addObject:str];
  1396. }else{
  1397. NSString *posString = [message substringWithRange:NSMakeRange(range.location + 1, range1.location)];
  1398. NSRange posRange = [posString rangeOfString:@"["];
  1399. if (posRange.location != NSNotFound) {
  1400. str = [message substringToIndex:posRange.location + 1];
  1401. str1 = [message substringFromIndex:posRange.location + 1];
  1402. [array addObject:str];
  1403. }else{
  1404. str = [message substringToIndex:range.location + 1];
  1405. str1 = [message substringFromIndex:range.location + 1];
  1406. [array addObject:str];
  1407. }
  1408. }
  1409. [self getMessageRange:str1 :array];
  1410. }
  1411. }else if (range.length>0 && range1.length>0 && range1.location < range.location){
  1412. NSString *str = [message substringToIndex:range1.location + 1];
  1413. NSString *str1 = [message substringFromIndex:range1.location + 1];
  1414. [array addObject:str];
  1415. [self getMessageRange:str1 :array];
  1416. }else if (message != nil) {
  1417. [array addObject:message];
  1418. }
  1419. }
  1420. //拼接字符串
  1421. - (void)splicingString:(NSMutableArray *)array inArray:(NSMutableArray *)contentArray{
  1422. if (_num >= array.count) {
  1423. return;
  1424. }
  1425. NSString *str = [NSString string];
  1426. for (NSInteger i = _num; i < array.count; i++) {
  1427. NSString *object = array[i];
  1428. if ([object hasSuffix:@"]"]&&[object hasPrefix:@"["]) {
  1429. [contentArray addObject:str];
  1430. [contentArray addObject:object];
  1431. _num = i + 1;
  1432. break;
  1433. }else{
  1434. _num = i + 1;
  1435. str = [str stringByAppendingString:object];
  1436. if (_num >= array.count) {
  1437. [contentArray addObject:str];
  1438. return;
  1439. }
  1440. }
  1441. }
  1442. [self splicingString:array inArray:contentArray];
  1443. }
  1444. - (NSMutableArray *)fetchAllSearchRecordWithTable:(NSString *)tableName{
  1445. FMDatabase *db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
  1446. NSString *str = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@'('ID' INTEGER PRIMARY KEY AUTOINCREMENT,'record' TEXT NOT NULL)",tableName];
  1447. BOOL success = [db executeUpdate:str];
  1448. if (!success) {
  1449. NSLog(@"创建搜索记录表失败");
  1450. }
  1451. NSString *allRecord = [NSString stringWithFormat:@"select * from '%@' order by ID",tableName];
  1452. FMResultSet *rs = [db executeQuery:allRecord];
  1453. NSMutableArray *array = [NSMutableArray array];
  1454. while ([rs next]) {
  1455. NSString *record = [rs stringForColumn:@"record"];
  1456. if (record != nil && record != NULL) {
  1457. [array addObject:record];
  1458. }
  1459. }
  1460. return array;
  1461. }
  1462. - (BOOL)insertSearchRecord:(NSString *)searchRecord withTable:(NSString *)tableName{
  1463. FMDatabase *db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
  1464. NSString *create = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@'('ID' INTEGER PRIMARY KEY AUTOINCREMENT,'record' TEXT NOT NULL)",tableName];
  1465. BOOL createSuccess = [db executeUpdate:create];
  1466. if (!createSuccess) {
  1467. NSLog(@"创建搜索记录表失败");
  1468. }
  1469. [self deleteOneSearchRecord:searchRecord withTable:tableName];
  1470. NSString *record = [NSString stringWithFormat:@"INSERT INTO '%@' (record) VALUES (?)",tableName];
  1471. return [db executeUpdate:record,searchRecord];
  1472. }
  1473. - (BOOL)deleteOneSearchRecord:(NSString *)searchRecord withTable:(NSString *)tableName{
  1474. FMDatabase *db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
  1475. NSString *deleteOne = [NSString stringWithFormat:@"delete from '%@' where record = '%@'",tableName,searchRecord];
  1476. return [db executeUpdate:deleteOne];
  1477. }
  1478. - (BOOL)deleteAllSearchRecordWithTable:(NSString *)tableName{
  1479. FMDatabase *db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
  1480. NSString *deleteAll = [NSString stringWithFormat:@"delete from '%@'",tableName];
  1481. return [db executeUpdate:deleteAll];
  1482. }
  1483. @end