JXUserObject.m 68 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686
  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. // [user release];
  346. }
  347. [rs close];
  348. if([resultArr count]==0){
  349. // [resultArr release];
  350. resultArr = nil;
  351. }
  352. return resultArr;
  353. }
  354. -(JXUserObject*)getUserById:(NSString*)aUserId
  355. {
  356. NSString* myUserId = MY_USER_ID;
  357. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  358. FMResultSet *rs=[db executeQuery:[NSString stringWithFormat:@"select * from %@ where userId=?",_tableName],aUserId];
  359. if ([rs next]) {
  360. JXUserObject *user=[[JXUserObject alloc]init];
  361. [super userFromDataset:user rs:rs];
  362. [rs close];
  363. return user;
  364. };
  365. return nil;
  366. }
  367. -(JXUserObject*)getUserByRoomId:(NSString*)roomId {
  368. NSString* myUserId = MY_USER_ID;
  369. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  370. FMResultSet *rs=[db executeQuery:[NSString stringWithFormat:@"select * from %@ where roomId=?",_tableName],roomId];
  371. if ([rs next]) {
  372. JXUserObject *user=[[JXUserObject alloc]init];
  373. [super userFromDataset:user rs:rs];
  374. [rs close];
  375. return user;
  376. };
  377. return nil;
  378. }
  379. -(int)getNewTotal
  380. {
  381. NSString* myUserId = MY_USER_ID;
  382. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  383. int n = 0;
  384. FMResultSet *rs=[db executeQuery:[NSString stringWithFormat:@"select sum(newMsgs) from %@ where newMsgs>0",_tableName]];
  385. if ([rs next]) {
  386. n = [[rs objectForColumnIndex:0] intValue];
  387. [rs close];
  388. };
  389. return n;
  390. }
  391. -(void)getDataFromDict:(NSDictionary*)dict{
  392. [self userFromDictionary:dict];
  393. self.type = nil;
  394. self.content = nil;
  395. // self.timeSend = nil;
  396. self.msgsNew = nil;
  397. self.timeCreate = [NSDate date];
  398. self.roomFlag = [NSNumber numberWithInt:0];
  399. /*
  400. 我是A,调user/get?userId=B
  401. friends->isBeenBlack,A是不是被B拉黑
  402. friends->Blacklist,A是不是拉黑B
  403. */
  404. self.status = [(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"status"];
  405. self.userType = [dict objectForKey:@"userType"];
  406. if([[(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"blacklist"] boolValue])
  407. self.status = [NSNumber numberWithInt:friend_status_black];
  408. self.isBeenBlack = [(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"isBeenBlack"];
  409. if ([self.isBeenBlack intValue] == 1) {
  410. self.status = [NSNumber numberWithInt:friend_status_hisBlack];
  411. }
  412. // if([[[dict objectForKey:@"friends"] objectForKey:@"isBeenBlack"] boolValue])
  413. // self.status = [NSNumber numberWithInt:friend_status_hisBlack];
  414. self.userId = [[dict objectForKey:@"userId"] stringValue];
  415. NSString *remarkName = [(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"remarkName"];
  416. if (remarkName.length > 0) {
  417. self.remarkName = remarkName;
  418. }
  419. NSString *describe = [(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"describe"];
  420. if (describe.length > 0) {
  421. self.describe = describe;
  422. }
  423. // if ([dict objectForKey:@"toFriendsRole"]) {
  424. // NSArray *roleDict = [dict objectForKey:@"toFriendsRole"];
  425. // self.role = @([[[roleDict firstObject] objectForKey:@"role"] intValue]);
  426. // }
  427. self.userNickname = [dict objectForKey:@"nickname"];
  428. self.userDescription = [dict objectForKey:@"description"];
  429. self.companyId = [dict objectForKey:@"companyId"];
  430. self.companyName = [(NSDictionary *)[dict objectForKey:@"company"] objectForKey:@"name"];
  431. self.msgBackGroundUrl = [dict objectForKey:@"msgBackGroundUrl"];
  432. self.showLastLoginTime = [dict objectForKey:@"showLastLoginTime"];
  433. self.showLastLoginTime = [dict objectForKey:@"showLastLoginTime"];
  434. self.membershipAccount = [dict objectForKey:@"membershipAccount"];
  435. self.telephone = [dict objectForKey:@"telephone"];
  436. self.phone = [dict objectForKey:@"phone"];
  437. self.password = [dict objectForKey:@"password"];
  438. self.userType = [dict objectForKey:@"userType"];
  439. self.birthday = [NSDate dateWithTimeIntervalSince1970:[[dict objectForKey:@"birthday"] longLongValue]];
  440. self.sex = [dict objectForKey:@"sex"];
  441. self.countryId = [dict objectForKey:@"countryId"];
  442. self.provinceId = [dict objectForKey:@"provinceId"];
  443. self.cityId = [dict objectForKey:@"cityId"];
  444. self.areaId = [dict objectForKey:@"areaId"];
  445. self.fansCount = [dict objectForKey:@"fansCount"];
  446. self.attCount = [dict objectForKey:@"attCount"];
  447. self.level = [dict objectForKey:@"level"];
  448. self.vip = [dict objectForKey:@"vip"];
  449. self.notSeeHim = [dict objectForKey:@"notSeeHim"];
  450. self.notLetSeeHim = [dict objectForKey:@"notLetSeeHim"];
  451. self.model = [dict objectForKey:@"model"];
  452. self.osVersion = [dict objectForKey:@"osVersion"];
  453. self.serialNumber = [dict objectForKey:@"serialNumber"];
  454. self.location = [dict objectForKey:@"location"];
  455. // self.latitude = [dict objectForKey:@"latitude"];
  456. // self.longitude = [dict objectForKey:@"longitude"];
  457. self.latitude = [(NSDictionary *)[dict objectForKey:@"loc"] objectForKey:@"lat"];
  458. self.longitude = [(NSDictionary *)[dict objectForKey:@"loc"] objectForKey:@"lng"];
  459. if ([dict objectForKey:@"friends"]) {
  460. self.offlineNoPushMsg = [(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"offlineNoPushMsg"];
  461. self.isOpenReadDel = [(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"isOpenSnapchat"];
  462. long time = [[(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"openTopChatTime"] longLongValue];
  463. self.topTime = [NSDate dateWithTimeIntervalSince1970:time];
  464. self.chatRecordTimeOut = [NSString stringWithFormat:@"%@", [(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"chatRecordTimeOut"]];
  465. self.veryCare = [(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"veryCare"];
  466. self.veryCareTones = [(NSDictionary *)[dict objectForKey:@"friends"] objectForKey:@"veryCareTones"];
  467. }
  468. if ([dict objectForKey:@"member"]) {
  469. long time = [[(NSDictionary *)[dict objectForKey:@"member"] objectForKey:@"openTopChatTime"] longLongValue];
  470. self.topTime = [NSDate dateWithTimeIntervalSince1970:time];
  471. self.offlineNoPushMsg = [(NSDictionary *)[dict objectForKey:@"member"] objectForKey:@"offlineNoPushMsg"];
  472. }
  473. self.talkTime = [dict objectForKey:@"talkTime"];
  474. self.myInviteCode = [dict objectForKey:@"myInviteCode"];
  475. self.setAccountCount = [dict objectForKey:@"setAccountCount"];
  476. self.account = [dict objectForKey:@"account"];
  477. self.publicKeyDH = [dict objectForKey:@"publicKeyDH"];
  478. self.publicKeyRSARoom = [dict objectForKey:@"publicKeyRSARoom"];
  479. self.chatKeyGroup = [dict objectForKey:@"chatKeyGroup"];
  480. }
  481. -(void)getDataFromDictSmall:(NSDictionary*)dict{
  482. self.type = nil;
  483. self.content = nil;
  484. self.timeSend = nil;
  485. self.msgsNew = nil;
  486. self.roomFlag = [NSNumber numberWithInt:0];
  487. self.timeCreate = [dict objectForKey:@"createTime"];
  488. self.status = [dict objectForKey:@"status"];
  489. if ([[dict objectForKey:@"isBeenBlack"] intValue] == 1) {
  490. self.status = [NSNumber numberWithInt:friend_status_hisBlack];
  491. }
  492. self.userType = [dict objectForKey:@"toUserType"];
  493. if ([[dict objectForKey:@"blacklist"] integerValue] == 1) {
  494. self.status = [NSNumber numberWithInt:-1];
  495. }
  496. // if ([dict objectForKey:@"toFriendsRole"]) {
  497. // NSArray *roleDict = [dict objectForKey:@"toFriendsRole"];
  498. // self.role = @([[[roleDict firstObject] objectForKey:@"role"] intValue]);
  499. // }
  500. self.userId = [[dict objectForKey:@"toUserId"] stringValue];
  501. self.remarkName = [dict objectForKey:@"remarkName"];
  502. if ([[dict objectForKey:@"remarkName"] length] > 0) {
  503. self.userNickname = [dict objectForKey:@"remarkName"];
  504. }else {
  505. self.userNickname = [dict objectForKey:@"toNickname"];
  506. }
  507. self.describe = [dict objectForKey:@"describe"];
  508. if ([dict objectForKey:@"companyId"]) {
  509. self.companyId = [dict objectForKey:@"companyId"];
  510. }else {
  511. self.companyId = [NSNumber numberWithInt:0];
  512. }
  513. if ([dict objectForKey:@"chatRecordTimeOut"]) {
  514. self.chatRecordTimeOut = [NSString stringWithFormat:@"%@",[dict objectForKey:@"chatRecordTimeOut"]];
  515. }
  516. if ([dict objectForKey:@"talkTime"]) {
  517. self.talkTime = [dict objectForKey:@"talkTime"];
  518. }
  519. if ([dict objectForKey:@"offlineNoPushMsg"]) {
  520. self.offlineNoPushMsg = [dict objectForKey:@"offlineNoPushMsg"];
  521. }
  522. if ([dict objectForKey:@"veryCare"]) {
  523. self.veryCare = [dict objectForKey:@"veryCare"];
  524. }
  525. if ([dict objectForKey:@"veryCareTones"]) {
  526. self.veryCareTones = [dict objectForKey:@"veryCareTones"];
  527. }
  528. if ([dict objectForKey:@"telephone"]) {
  529. self.telephone = [dict objectForKey:@"telephone"];
  530. }
  531. if ([dict objectForKey:@"openTopChatTime"]) {
  532. long time = [[dict objectForKey:@"openTopChatTime"] longLongValue];
  533. if (time > 0) {
  534. self.topTime = [NSDate dateWithTimeIntervalSince1970:time];
  535. }
  536. }
  537. if ([dict objectForKey:@"dhMsgPublicKey"]) {
  538. self.publicKeyDH = [dict objectForKey:@"dhMsgPublicKey"];
  539. }
  540. if ([dict objectForKey:@"rsaMsgPublicKey"]) {
  541. self.publicKeyRSARoom = [dict objectForKey:@"rsaMsgPublicKey"];
  542. }
  543. if ([dict objectForKey:@"chatKeyGroup"]) {
  544. self.chatKeyGroup = [dict objectForKey:@"chatKeyGroup"];
  545. }
  546. }
  547. -(void)copyFromResume:(resumeBaseData*)resume{
  548. // self.telephone = resume.telephone;
  549. self.userNickname= resume.name;
  550. self.birthday = [NSDate dateWithTimeIntervalSince1970:resume.birthday];
  551. self.sex = [NSNumber numberWithBool:resume.sex];
  552. self.countryId = [NSNumber numberWithInt:resume.countryId];
  553. self.provinceId = [NSNumber numberWithInt:resume.provinceId];
  554. self.cityId = [NSNumber numberWithInt:resume.cityId];
  555. self.areaId = [NSNumber numberWithInt:resume.areaId];
  556. self.latitude = [NSNumber numberWithDouble:g_server.latitude];
  557. self.longitude = [NSNumber numberWithDouble:g_server.longitude];
  558. }
  559. +(void)deleteUserAndMsg:(NSString*)s{
  560. JXUserObject* p = [[JXUserObject alloc]init];
  561. p.userId = s;
  562. [p notifyDelFriend];
  563. [p delete];
  564. // [p release];
  565. JXMessageObject* m = [[JXMessageObject alloc]init];
  566. m.fromUserId = MY_USER_ID;
  567. m.toUserId = s;
  568. [m deleteAll];
  569. // [m release];
  570. }
  571. +(BOOL)updateNewMsgsTo0{
  572. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
  573. BOOL worked=[db executeUpdate:[NSString stringWithFormat:@"update friend set newMsgs=0"]];
  574. return worked;
  575. }
  576. -(void)copyFromRoomMember:(memberData*)p{
  577. self.userId = [NSString stringWithFormat:@"%ld",p.userId];
  578. self.userNickname = p.userNickName;
  579. }
  580. // 更新最后输入
  581. - (BOOL) updateLastInput {
  582. NSString* myUserId = MY_USER_ID;
  583. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  584. [self checkTableCreatedInDb:db];
  585. NSString* sql = [NSString stringWithFormat:@"update %@ set lastInput=? where userId=?",_tableName];
  586. BOOL worked = [db executeUpdate:sql,self.lastInput,self.userId];
  587. return worked;
  588. }
  589. // 更新消息界面显示的最后一条消息
  590. - (BOOL) updateLastContent {
  591. NSString* myUserId = MY_USER_ID;
  592. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  593. [self checkTableCreatedInDb:db];
  594. NSString* sql = [NSString stringWithFormat:@"update %@ set content=? where userId=?",_tableName];
  595. BOOL worked = [db executeUpdate:sql,self.content,self.userId];
  596. return worked;
  597. }
  598. +(NSString*)getUserNameWithUserId:(NSString*)userId{
  599. if(userId==nil)
  600. return nil;
  601. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
  602. //获取用户名
  603. NSString* sql= [NSString stringWithFormat:@"select userNickname from friend where userId=%@",userId];
  604. FMResultSet *rs=[db executeQuery:sql];
  605. if([rs next]) {
  606. NSString* s = [rs objectForColumnName:@"userNickname"];
  607. return s;
  608. }
  609. return nil;
  610. }
  611. +(NSMutableArray *)getUserNameWithUserIdsArray:(NSArray *)userIdsArray{
  612. if (userIdsArray.count == 0) {
  613. return nil;
  614. }
  615. NSMutableArray *userNamesArray = [NSMutableArray array];
  616. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
  617. //获取用户名
  618. for (NSInteger i = 0; i < userIdsArray.count; i++) {
  619. NSString *userId = userIdsArray[i];
  620. NSString* sql= [NSString stringWithFormat:@"select userNickname from friend where userId=%@",userId];
  621. FMResultSet *rs=[db executeQuery:sql];
  622. if([rs next]) {
  623. NSString* s = [rs objectForColumnName:@"userNickname"];
  624. if (!s) {
  625. s = @"";
  626. }
  627. [userNamesArray addObject:s];
  628. }
  629. }
  630. if (userNamesArray.count > 0) {
  631. return userNamesArray;
  632. }
  633. return nil;
  634. }
  635. // 更新置顶时间
  636. - (BOOL) updateTopTime {
  637. NSString* myUserId = MY_USER_ID;
  638. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  639. [self checkTableCreatedInDb:db];
  640. NSString* sql = [NSString stringWithFormat:@"update %@ set topTime=? where userId=?",_tableName];
  641. BOOL worked = [db executeUpdate:sql,self.topTime,self.userId];
  642. return worked;
  643. }
  644. // 更新群组有效性
  645. - (BOOL) updateGroupInvalid {
  646. NSString* myUserId = MY_USER_ID;
  647. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  648. [self checkTableCreatedInDb:db];
  649. NSString* sql = [NSString stringWithFormat:@"update %@ set groupStatus=? where userId=?",_tableName];
  650. BOOL worked = [db executeUpdate:sql,self.groupStatus,self.userId];
  651. return worked;
  652. }
  653. // 更新用户昵称
  654. - (BOOL) updateUserNickname {
  655. NSString* myUserId = MY_USER_ID;
  656. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  657. [self checkTableCreatedInDb:db];
  658. NSString *nickName;
  659. if (self.remarkName.length > 0) {
  660. nickName = self.userNickname;
  661. }else {
  662. nickName = self.userNickname;
  663. }
  664. NSString* sql = [NSString stringWithFormat:@"update %@ set userNickname=? where userId=?",_tableName];
  665. BOOL worked = [db executeUpdate:sql,nickName,self.userId];
  666. return worked;
  667. }
  668. // 更新群groupType
  669. - (BOOL) updateGroupType {
  670. NSString* myUserId = MY_USER_ID;
  671. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  672. [self checkTableCreatedInDb:db];
  673. NSString* sql = [NSString stringWithFormat:@"update %@ set groupType=? where userId=?",_tableName];
  674. BOOL worked = [db executeUpdate:sql,self.groupType,self.userId];
  675. return worked;
  676. }
  677. // 更新群roomId
  678. - (BOOL) updateRoomId {
  679. NSString* myUserId = MY_USER_ID;
  680. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  681. [self checkTableCreatedInDb:db];
  682. NSString* sql = [NSString stringWithFormat:@"update %@ set roomId=? where userId=?",_tableName];
  683. BOOL worked = [db executeUpdate:sql,self.roomId,self.userId];
  684. return worked;
  685. }
  686. // 更新用户备注
  687. - (BOOL) updateRemarkName {
  688. NSString* myUserId = MY_USER_ID;
  689. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  690. [self checkTableCreatedInDb:db];
  691. NSString* sql = [NSString stringWithFormat:@"update %@ set remarkName=? where userId=?",_tableName];
  692. BOOL worked = [db executeUpdate:sql,self.remarkName,self.userId];
  693. return worked;
  694. }
  695. // 更新用户电话
  696. - (BOOL) updateTelephone {
  697. NSString* myUserId = MY_USER_ID;
  698. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  699. [self checkTableCreatedInDb:db];
  700. NSString* sql = [NSString stringWithFormat:@"update %@ set telephone=? where userId=?",_tableName];
  701. BOOL worked = [db executeUpdate:sql,self.telephone,self.userId];
  702. return worked;
  703. }
  704. // 更新用户聊天记录过期时间
  705. - (BOOL) updateUserChatRecordTimeOut {
  706. NSString* myUserId = MY_USER_ID;
  707. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  708. [self checkTableCreatedInDb:db];
  709. NSString* sql = [NSString stringWithFormat:@"update %@ set chatRecordTimeOut=? where userId=?",_tableName];
  710. BOOL worked = [db executeUpdate:sql,self.chatRecordTimeOut,self.userId];
  711. return worked;
  712. }
  713. // 更新列表最近一条消息记录
  714. - (BOOL) updateUserLastChatList:(NSArray *)array {
  715. NSMutableArray *userArray = [NSMutableArray array];
  716. for (NSInteger i = 0; i < array.count; i ++) {
  717. NSDictionary *dict = array[i];
  718. NSString *dicJid=dict[@"jid"];
  719. if ([g_xmpp.blackList containsObject:dict[@"jid"]]||dicJid.length>=10) {
  720. continue;
  721. }
  722. JXUserObject *user = [[JXUserObject sharedInstance] getUserById:dict[@"jid"]];
  723. NSNumber *isEncrypt = dict[@"isEncrypt"];
  724. NSString *messageId = dict[@"messageId"];
  725. long timeSend = [dict[@"timeSend"] longLongValue];
  726. NSString *content = dict[@"content"];
  727. if ([current_chat_userId isEqualToString:user.userId]) {
  728. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  729. [g_notify postNotificationName:kChatVCMessageSync object:@(timeSend)];
  730. });
  731. }
  732. content = [self getLastListContent:dict];
  733. if ([isEncrypt boolValue]) {
  734. NSMutableString *str = [NSMutableString string];
  735. [str appendString:APIKEY];
  736. [str appendString:[NSString stringWithFormat:@"%ld",timeSend]];
  737. [str appendString:messageId];
  738. NSString *keyStr = [g_server getMD5String:str];
  739. content = [DESUtil decryptDESStr:content key:keyStr];
  740. }else{
  741. content = content;
  742. }
  743. user.content = content;
  744. user.type = dict[@"type"];
  745. user.timeSend = [NSDate dateWithTimeIntervalSince1970:timeSend / 1000.0];
  746. if (user) {
  747. if (user.content.length > 0) {
  748. [user update];
  749. [userArray addObject:user];
  750. }
  751. }else {
  752. user = [[JXUserObject alloc] init];
  753. user.content = content;
  754. user.type = dict[@"type"];
  755. if ([dict[@"isRoom"] boolValue]) {
  756. user.roomFlag= [NSNumber numberWithInt:1];
  757. user.companyId= [NSNumber numberWithInt:0];
  758. user.status= [NSNumber numberWithInt:2];
  759. user.offlineNoPushMsg = [NSNumber numberWithInt:0];
  760. user.isAtMe = [NSNumber numberWithInt:0];
  761. }
  762. user.timeSend = [NSDate dateWithTimeIntervalSince1970:timeSend];
  763. user.userId = dict[@"jid"];
  764. user.userNickname = dict[@"toUserName"];
  765. [user insert];
  766. }
  767. }
  768. [self updateLastListContent:userArray withTransaction:YES];
  769. return YES;
  770. }
  771. - (void)updateLastListContent:(NSArray *)dataArray withTransaction:(BOOL )useTransaction{
  772. NSString* myUserId = MY_USER_ID;
  773. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  774. [self checkTableCreatedInDb:db];
  775. if (useTransaction) {
  776. [db beginTransaction];
  777. BOOL isRollBack = NO;
  778. @try {
  779. for (NSInteger i = 0; i < dataArray.count; i++) {
  780. JXUserObject *user = dataArray[i];
  781. if (user.roomId.length > 0) {
  782. user.roomFlag= [NSNumber numberWithInt:1];
  783. user.companyId= [NSNumber numberWithInt:0];
  784. if (!user.status) {
  785. user.status= [NSNumber numberWithInt:2];
  786. }
  787. }
  788. if(!user.timeSend)
  789. user.timeSend = [NSDate date];
  790. if (!user.companyId) {
  791. user.companyId = [NSNumber numberWithInt:0];
  792. }
  793. if ([user.userId intValue] == [SHIKU_TRANSFER intValue]) {
  794. user.userNickname = Localized(@"JX_PaymentNo.");
  795. }
  796. if ([user.topTime timeIntervalSince1970] > 0) {
  797. user.topTime = self.topTime;
  798. }else {
  799. user.topTime = nil;
  800. }
  801. 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];
  802. [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];
  803. }
  804. } @catch (NSException *exception) {
  805. isRollBack = YES;
  806. [db rollback];
  807. } @finally {
  808. if (!isRollBack) {
  809. [db commit];
  810. [db close];
  811. [g_App copyDbWithUserId:MY_USER_ID];
  812. }else{
  813. [db close];
  814. [self updateLastListContent:dataArray withTransaction:NO];
  815. }
  816. }
  817. }else{
  818. for (NSInteger i = 0; i < dataArray.count; i++) {
  819. JXUserObject *user = dataArray[i];
  820. if(!user.timeSend)
  821. user.timeSend = [NSDate date];
  822. if (!user.companyId) {
  823. user.companyId = [NSNumber numberWithInt:0];
  824. }
  825. if ([user.userId intValue] == [SHIKU_TRANSFER intValue]) {
  826. user.userNickname = Localized(@"JX_PaymentNo.");
  827. }
  828. if ([user.topTime timeIntervalSince1970] > 0) {
  829. user.topTime = self.topTime;
  830. }else {
  831. user.topTime = nil;
  832. }
  833. 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];
  834. 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];
  835. if (!worked) {
  836. NSLog(@"存失败");
  837. }
  838. }
  839. [db close];
  840. [g_App copyDbWithUserId:MY_USER_ID];
  841. }
  842. }
  843. - (NSString *)getLastListContent:(NSDictionary *)dict {
  844. int type = [dict[@"type"] intValue];
  845. NSString *content = dict[@"content"];
  846. NSString *fromUserId = dict[@"from"];
  847. NSString *fromUserName = dict[@"fromUserName"];
  848. if (!fromUserName) {
  849. fromUserName = @"";
  850. }
  851. NSString *toUserId = dict[@"to"];
  852. NSString *toUserName = dict[@"toUserName"];
  853. if (!toUserName) {
  854. toUserName = @"";
  855. }
  856. switch (type) {
  857. case kWCMessageTypeWithdraw:{
  858. if ([dict[@"isRoom"] boolValue]) {
  859. if ([fromUserId isEqualToString:MY_USER_ID]) {
  860. content = Localized(@"JX_AlreadyWithdraw");
  861. }else {
  862. content = [NSString stringWithFormat:@"%@ %@",fromUserName, Localized(@"JX_OtherWithdraw")];
  863. }
  864. }else {
  865. if ([fromUserId isEqualToString:MY_USER_ID]) {
  866. content = Localized(@"JX_AlreadyWithdraw");
  867. }else {
  868. content = [NSString stringWithFormat:@"%@ %@",fromUserName, Localized(@"JX_OtherWithdraw")];
  869. }
  870. }
  871. }
  872. break;
  873. case kWCMessageTypeShare:
  874. content = [NSString stringWithFormat:@"[%@]",Localized(@"JXLink")];
  875. break;
  876. case kWCMessageTypeRedPacketReceive:
  877. content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXRed_whoGet")];
  878. break;
  879. case kWCMessageTypeRedPacketReturn:
  880. content = [NSString stringWithFormat:@"%@",Localized(@"JX_ RedEnvelopeExpired")];
  881. break;
  882. case kWCMessageTypeGroupFileUpload:
  883. content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXMessage_fileUpload")];
  884. break;
  885. case kWCMessageTypeGroupFileDelete:
  886. content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXMessage_fileDelete")];
  887. break;
  888. case kWCMessageTypeGroupFileDownload:
  889. content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXMessage_fileDownload")];
  890. break;
  891. case kRoomRemind_RoomName:
  892. content = [NSString stringWithFormat:@"%@%@%@",fromUserName,Localized(@"JXMessageObject_UpdateRoomName"),content];
  893. break;
  894. case kRoomRemind_NickName:{
  895. content = [NSString stringWithFormat:@"%@%@%@",fromUserName,Localized(@"JXMessageObject_UpdateNickName"),content];
  896. }
  897. break;
  898. case kRoomRemind_DelRoom:
  899. if ([toUserId isEqualToString:MY_USER_ID]) {
  900. content = [NSString stringWithFormat:Localized(@"JX_DissolutionGroup"),fromUserName];
  901. }else {
  902. content = [NSString stringWithFormat:@"%@%@:%@",fromUserName,Localized(@"JXMessage_delRoom"),content];
  903. }
  904. break;
  905. case kRoomRemind_AddMember:
  906. if([toUserId isEqualToString:fromUserId])
  907. content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXMessageObject_GroupChat")];
  908. else
  909. content = [NSString stringWithFormat:@"%@%@%@",fromUserName,Localized(@"JXMessageObject_InterFriend"),toUserName];
  910. break;
  911. case kLiveRemind_ExitRoom:
  912. if([toUserId isEqualToString:fromUserId]){
  913. content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"EXITED_LIVE_ROOM")];//退出
  914. }else{
  915. content = [NSString stringWithFormat:@"%@%@",toUserName,Localized(@"JX_LiveVC_kickLive")];//被踢出
  916. }
  917. break;
  918. case kRoomRemind_DelMember:
  919. if([toUserId isEqualToString:fromUserId]){
  920. content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXMessageObject_OutGroupChat")];
  921. }else{
  922. if ([toUserId isEqualToString:MY_USER_ID]) {
  923. content = [NSString stringWithFormat:Localized(@"JX_OutOfTheGroup"),fromUserName];
  924. }else {
  925. if ([fromUserName isEqualToString:toUserName]) {
  926. content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXRoomMemberVC_OutPutRoom")];
  927. }else {
  928. content = [NSString stringWithFormat:@"%@%@%@",fromUserName,Localized(@"JXMessageObject_KickOut"),toUserName];
  929. }
  930. }
  931. }
  932. break;
  933. case kRoomRemind_NewNotice:
  934. content = [NSString stringWithFormat:@"%@%@%@",fromUserName,Localized(@"JXMessageObject_AddNewAdv"),content];
  935. break;
  936. case kLiveRemind_ShatUp:
  937. case kRoomRemind_DisableSay:{
  938. if([content longLongValue]==0){
  939. content = [NSString stringWithFormat:@"%@%@%@%@",fromUserName,Localized(@"JXMessageObject_Yes"),toUserName,Localized(@"JXMessageObject_CancelGag")];
  940. }else{
  941. NSDate* d = [NSDate dateWithTimeIntervalSince1970:[content longLongValue]];
  942. NSString* t = [TimeUtil formatDate:d format:@"MM-dd HH:mm"];
  943. content = [NSString stringWithFormat:@"%@%@%@%@%@",fromUserName,Localized(@"JXMessageObject_Yes"),toUserName,Localized(@"JXMessageObject_SetGagWithTime"),t];
  944. d = nil;
  945. }
  946. break;
  947. }
  948. case kLiveRemind_SetManager:
  949. case kRoomRemind_SetManage:{
  950. if ([content integerValue] == 1) {
  951. content = [NSString stringWithFormat:@"%@%@%@%@",Localized(@"JXGroup_Owner"),Localized(@"JXSettingVC_Set"),toUserName,Localized(@"JXMessage_admin")];
  952. }else {
  953. content = [NSString stringWithFormat:@"%@%@%@",Localized(@"JXGroup_Owner"),Localized(@"CANCEL_ADMINISTRATOR"),toUserName];
  954. }
  955. break;
  956. }
  957. case kRoomRemind_EnterLiveRoom:{
  958. content = [NSString stringWithFormat:@"%@%@",toUserName,Localized(@"Enter_LiveRoom")];//加入房间消息
  959. break;
  960. }
  961. case kRoomRemind_ShowRead:{
  962. if ([content integerValue] == 1)
  963. content = [NSString stringWithFormat:@"%@%@%@",Localized(@"JXGroup_Owner"),Localized(@"JX_Enable"),Localized(@"JX_RoomReadMode")];
  964. else
  965. content = [NSString stringWithFormat:@"%@%@%@",Localized(@"JXGroup_Owner"),Localized(@"JX_Disable"),Localized(@"JX_RoomReadMode")];
  966. break;
  967. }
  968. case kRoomRemind_NeedVerify:{
  969. if (!content || content.length <= 0) {
  970. content = Localized(@"JX_GroupInvitationConfirmation");
  971. }else {
  972. if ([content integerValue] == 1)
  973. content = Localized(@"JX_GroupOwnersOpenValidation");
  974. else
  975. content = Localized(@"JX_GroupOwnersCloseValidation");
  976. }
  977. break;
  978. }
  979. case kRoomRemind_IsLook:{
  980. if ([content integerValue] == 0)
  981. content = Localized(@"JX_GroupOwnersPublicGroup");
  982. else
  983. content = Localized(@"JX_GroupOwnersPrivateGroup");
  984. break;
  985. }
  986. case kRoomRemind_ShowMember:{
  987. if ([content integerValue] == 1)
  988. content = Localized(@"JX_GroupOwnersShowMembers");
  989. else
  990. content = Localized(@"JX_GroupOwnersNotShowMembers");
  991. break;
  992. }
  993. case kRoomRemind_allowSendCard:{
  994. if ([content integerValue] == 1)
  995. content = Localized(@"JX_ManagerOpenChat");
  996. else
  997. content = Localized(@"JX_ManagerOffChat");
  998. break;
  999. }
  1000. case kRoomRemind_RoomAllBanned:{
  1001. if ([content integerValue] > 0)
  1002. content = Localized(@"JX_ManagerOpenSilence");
  1003. else
  1004. content = Localized(@"JX_ManagerOffSilence");
  1005. break;
  1006. }
  1007. case kRoomRemind_RoomAllowInviteFriend:{
  1008. if ([content integerValue] > 0)
  1009. content = Localized(@"JX_ManagerOpenInviteFriends");
  1010. else
  1011. content = Localized(@"JX_ManagerOffInviteFriends");
  1012. break;
  1013. }
  1014. case kRoomRemind_RoomAllowUploadFile:{
  1015. if ([content integerValue] > 0)
  1016. content = Localized(@"JX_ManagerOpenSharedFiles");
  1017. else
  1018. content = Localized(@"JX_ManagerOffSharedFiles");
  1019. break;
  1020. }
  1021. case kRoomRemind_RoomAllowConference:{
  1022. if ([content integerValue] > 0)
  1023. content = Localized(@"JX_ManagerOpenMeetings");
  1024. else
  1025. content = Localized(@"JX_ManagerOffMeetings");
  1026. break;
  1027. }
  1028. case kRoomRemind_RoomAllowSpeakCourse:{
  1029. if ([content integerValue] > 0)
  1030. content = Localized(@"JX_ManagerOpenLectures");
  1031. else
  1032. content = Localized(@"JX_ManagerOffLectures");
  1033. break;
  1034. }
  1035. case kRoomRemind_RoomTransfer:{
  1036. content = [NSString stringWithFormat:@"\"%@\"%@", toUserName,Localized(@"JX_NewGroupManager")];
  1037. break;
  1038. }
  1039. case kRoomRemind_SetInvisible:{
  1040. if ([content integerValue] == 1) {
  1041. content = [NSString stringWithFormat:@"%@%@%@%@",fromUserName,Localized(@"JXSettingVC_Set"),toUserName,Localized(@"JX_ForTheInvisibleMan")];
  1042. }else if ([content integerValue] == -1){
  1043. content = [NSString stringWithFormat:@"%@%@%@",fromUserName,Localized(@"JX_EliminateTheInvisible"),toUserName];
  1044. }else if ([content integerValue] == 2){
  1045. content = [NSString stringWithFormat:@"%@%@%@%@",fromUserName,Localized(@"JXSettingVC_Set"),toUserName,@"为监控人"];
  1046. }else if ([content integerValue] == 0){
  1047. content = [NSString stringWithFormat:@"%@%@%@",fromUserName,@"取消监控人",toUserName];
  1048. }
  1049. break;
  1050. }
  1051. case kRoomRemind_RoomDisable:{
  1052. if ([content integerValue] == 1) {
  1053. content = [NSString stringWithFormat:@"%@",Localized(@"JX_ThisGroupHasBeenDisabled")];
  1054. }else {
  1055. content = [NSString stringWithFormat:@"%@",Localized(@"JX_GroupNotUse")];
  1056. }
  1057. break;
  1058. }
  1059. case kRoomRemind_SetRecordTimeOut:{
  1060. NSArray *pickerArr = @[Localized(@"JX_Forever"), Localized(@"JX_OneHour"), Localized(@"JX_OneDay"), Localized(@"JX_OneWeeks"), Localized(@"JX_OneMonth"), Localized(@"JX_OneQuarter"), Localized(@"JX_OneYear")];
  1061. double outTime = [content doubleValue];
  1062. NSString *str;
  1063. if (outTime <= 0) {
  1064. str = pickerArr[0];
  1065. }else if (outTime == 0.04) {
  1066. str = pickerArr[1];
  1067. }else if (outTime == 1) {
  1068. str = pickerArr[2];
  1069. }else if (outTime == 7) {
  1070. str = pickerArr[3];
  1071. }else if (outTime == 30) {
  1072. str = pickerArr[4];
  1073. }else if (outTime == 90) {
  1074. str = pickerArr[5];
  1075. }else{
  1076. str = pickerArr[6];
  1077. }
  1078. content = [NSString stringWithFormat:@"%@%@",Localized(@"JX_GroupManagerSetMsgDelTime"),str];
  1079. }
  1080. default:
  1081. break;
  1082. }
  1083. return content;
  1084. }
  1085. // 更新群组全员禁言时间
  1086. - (BOOL) updateGroupTalkTime {
  1087. NSString* myUserId = MY_USER_ID;
  1088. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1089. [self checkTableCreatedInDb:db];
  1090. NSString* sql = [NSString stringWithFormat:@"update %@ set talkTime=? where userId=?",_tableName];
  1091. BOOL worked = [db executeUpdate:sql,self.talkTime,self.userId];
  1092. return worked;
  1093. }
  1094. // 更新是否开启阅后即焚标志
  1095. - (BOOL) updateIsOpenReadDel {
  1096. NSString* myUserId = MY_USER_ID;
  1097. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1098. [self checkTableCreatedInDb:db];
  1099. NSString* sql = [NSString stringWithFormat:@"update %@ set isOpenReadDel=? where userId=?",_tableName];
  1100. BOOL worked = [db executeUpdate:sql,self.isOpenReadDel,self.userId];
  1101. return worked;
  1102. }
  1103. // 更新消息免打扰
  1104. - (BOOL) updateOfflineNoPushMsg {
  1105. NSString* myUserId = MY_USER_ID;
  1106. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1107. [self checkTableCreatedInDb:db];
  1108. NSString* sql = [NSString stringWithFormat:@"update %@ set offlineNoPushMsg=? where userId=?",_tableName];
  1109. BOOL worked = [db executeUpdate:sql,self.offlineNoPushMsg,self.userId];
  1110. return worked;
  1111. }
  1112. // 更新@我
  1113. - (BOOL) updateIsAtMe{
  1114. NSString* myUserId = MY_USER_ID;
  1115. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1116. [self checkTableCreatedInDb:db];
  1117. NSString* sql = [NSString stringWithFormat:@"update %@ set isAtMe=? where userId=?",_tableName];
  1118. BOOL worked = [db executeUpdate:sql,self.isAtMe,self.userId];
  1119. return worked;
  1120. }
  1121. // 更新userType
  1122. - (BOOL) updateUserType {
  1123. NSString* myUserId = MY_USER_ID;
  1124. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1125. [self checkTableCreatedInDb:db];
  1126. NSString* sql = [NSString stringWithFormat:@"update %@ set userType=? where userId=?",_tableName];
  1127. BOOL worked = [db executeUpdate:sql,self.userType,self.userId];
  1128. return worked;
  1129. }
  1130. // 更新创建者
  1131. - (BOOL)updateCreateUser {
  1132. NSString* myUserId = MY_USER_ID;
  1133. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1134. [self checkTableCreatedInDb:db];
  1135. NSString* sql = [NSString stringWithFormat:@"update %@ set createUserId=? where userId=?",_tableName];
  1136. BOOL worked = [db executeUpdate:sql,self.createUserId,self.userId];
  1137. return worked;
  1138. }
  1139. // 更新群组设置
  1140. - (BOOL)updateGroupSetting {
  1141. NSString* myUserId = MY_USER_ID;
  1142. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1143. [self checkTableCreatedInDb:db];
  1144. NSString* sql = [NSString stringWithFormat:@"update %@ set showRead=?,allowSendCard=?,allowConference=?,allowSpeakCourse=?,isNeedVerify=?,talkTime=? where userId=?",_tableName];
  1145. BOOL worked = [db executeUpdate:sql,self.showRead,self.allowSendCard,self.allowConference,self.allowSpeakCourse,self.isNeedVerify,self.talkTime,self.userId];
  1146. return worked;
  1147. }
  1148. // 更新好友关系
  1149. - (BOOL)updateStatus {
  1150. NSString* myUserId = MY_USER_ID;
  1151. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1152. [self checkTableCreatedInDb:db];
  1153. NSString* sql = [NSString stringWithFormat:@"update %@ set status=? where userId=?",_tableName];
  1154. BOOL worked = [db executeUpdate:sql,self.status,self.userId];
  1155. return worked;
  1156. }
  1157. // 更新新消息数量
  1158. - (BOOL)updateNewMsgNum {
  1159. NSString* myUserId = MY_USER_ID;
  1160. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1161. [self checkTableCreatedInDb:db];
  1162. NSString* sql = [NSString stringWithFormat:@"update %@ set newMsgs=? where userId=?",_tableName];
  1163. BOOL worked = [db executeUpdate:sql,self.msgsNew,self.userId];
  1164. return worked;
  1165. }
  1166. // 更新我的设备是否在线
  1167. - (BOOL)updateIsOnLine {
  1168. NSString* myUserId = MY_USER_ID;
  1169. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1170. [self checkTableCreatedInDb:db];
  1171. NSString* sql = [NSString stringWithFormat:@"update %@ set isOnLine=? where userId=?",_tableName];
  1172. BOOL worked = [db executeUpdate:sql,self.isOnLine,self.userId];
  1173. return worked;
  1174. }
  1175. // 更新群组最后群成员加入时间
  1176. - (BOOL)updateJoinTime {
  1177. NSString* myUserId = MY_USER_ID;
  1178. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1179. [self checkTableCreatedInDb:db];
  1180. NSString* sql = [NSString stringWithFormat:@"update %@ set joinTime=? where userId=?",_tableName];
  1181. BOOL worked = [db executeUpdate:sql,self.joinTime,self.userId];
  1182. return worked;
  1183. }
  1184. // 删除用户过期聊天记录
  1185. - (BOOL) deleteUserChatRecordTimeOutMsg {
  1186. NSMutableArray *array = [[JXMessageObject sharedInstance] fetchRecentChat];
  1187. for (NSInteger i = 0; i < array.count; i ++) {
  1188. JXMsgAndUserObject *userObj = array[i];
  1189. [[JXMessageObject sharedInstance] deleteTimeOutMsg:userObj.user.userId chatRecordTimeOut:userObj.user.chatRecordTimeOut];
  1190. }
  1191. return YES;
  1192. }
  1193. - (BOOL) deleteAllUser {
  1194. NSString* myUserId = MY_USER_ID;
  1195. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1196. [self checkTableCreatedInDb:db];
  1197. NSString *sql = [NSString stringWithFormat:@"delete from %@ where length(userId) > 5 and length(userId) < 10",_tableName];
  1198. BOOL worked=[db executeUpdate:sql,self.userId];
  1199. return worked;
  1200. }
  1201. // 清除所有黑名单好友
  1202. - (BOOL)deleteAllBlackUser {
  1203. NSString* myUserId = MY_USER_ID;
  1204. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1205. [self checkTableCreatedInDb:db];
  1206. NSString *sql = [NSString stringWithFormat:@"delete from %@ where status=-1",_tableName];
  1207. BOOL worked=[db executeUpdate:sql];
  1208. return worked;
  1209. }
  1210. //插入已拨打的电话号码
  1211. - (BOOL) insertPhone:(NSString *)phone time:(NSDate *)time {
  1212. NSString* myUserId = MY_USER_ID;
  1213. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1214. [self checkPhoneTableCreatedInDb:db];
  1215. FMResultSet * rs = [db executeQuery:[NSString stringWithFormat:@"select * from telePhone where phone=?"],phone];
  1216. BOOL flag = NO;
  1217. if([rs next]) {
  1218. flag = YES;
  1219. }
  1220. // FMDBQuickCheck(worked);
  1221. if (!flag) {
  1222. NSString *insertStr=[NSString stringWithFormat:@"INSERT INTO '%@' ('phone','time') VALUES (?,?)",@"telePhone"];
  1223. BOOL worked = [db executeUpdate:insertStr,phone, time];
  1224. return worked;
  1225. }
  1226. return YES;
  1227. }
  1228. // 删除已拨打的电话号码
  1229. - (BOOL) deletePhone:(NSString *)phone {
  1230. NSString* myUserId = MY_USER_ID;
  1231. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1232. [self checkPhoneTableCreatedInDb:db];
  1233. BOOL worked = [db executeUpdate:[NSString stringWithFormat:@"delete from telePhone where phone=?"],phone];
  1234. return worked;
  1235. }
  1236. - (NSMutableDictionary *) getPhoneDic {
  1237. NSString* myUserId = MY_USER_ID;
  1238. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1239. [self checkPhoneTableCreatedInDb:db];
  1240. NSString* sql = [NSString stringWithFormat:@"select * from telePhone"];
  1241. FMResultSet *rs = [db executeQuery:sql];
  1242. NSMutableDictionary *dict = [NSMutableDictionary dictionary];
  1243. while ([rs next]) {
  1244. [dict setObject:[rs dateForColumn:@"time"] forKey:[rs stringForColumn:@"phone"]];
  1245. }
  1246. return dict;
  1247. }
  1248. -(BOOL)checkPhoneTableCreatedInDb:(FMDatabase *)db
  1249. {
  1250. NSString *createStr=[NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@' ('phone' VARCHAR, 'time' DATETIME)",@"telePhone"];
  1251. BOOL worked = [db executeUpdate:createStr];
  1252. // FMDBQuickCheck(worked);
  1253. return worked;
  1254. }
  1255. // 更新好友DH公钥和RSA公钥
  1256. - (BOOL)updateDHPublicKeyAndRSAPublicKey {
  1257. NSString* myUserId = MY_USER_ID;
  1258. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1259. [self checkTableCreatedInDb:db];
  1260. NSString* sql = [NSString stringWithFormat:@"update %@ set publicKeyDH=?,publicKeyRSARoom=? where userId=?",_tableName];
  1261. BOOL worked = [db executeUpdate:sql,self.publicKeyDH,self.publicKeyRSARoom,self.userId];
  1262. return worked;
  1263. }
  1264. //查找好友
  1265. - (NSMutableArray *)searchContacts:(NSString *)searchtext{
  1266. 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];
  1267. return [self doFetch:sql];
  1268. }
  1269. //查找群组昵称
  1270. - (NSMutableArray *)searchGroup:(NSString *)searchtext withContent:(NSString *)content{
  1271. NSString *sql = [NSString stringWithFormat:@"select * from friend where roomFlag=1 and %@ like '%%%@%%' order by timeCreate",content,searchtext];
  1272. return [self doFetch:sql];
  1273. }
  1274. //查找成员
  1275. - (NSMutableArray *)searchGroupMember:(NSString *)searchtext{
  1276. NSString *sql = [NSString stringWithFormat:@"select * from friend where roomFlag=1"];
  1277. NSMutableArray *array = [self doFetch:sql];
  1278. NSMutableArray *roomIdArray = [NSMutableArray array];
  1279. for (JXUserObject *user in array) {
  1280. [roomIdArray addObject:user.roomId];
  1281. }
  1282. NSMutableArray *searchArray = [NSMutableArray array];
  1283. for (NSInteger i = 0; i<roomIdArray.count; i++) {
  1284. memberData *member = [memberData fetchMembersWithText:searchtext withRoomId:roomIdArray[i]];
  1285. if (member != nil) {
  1286. [searchArray addObject:member];
  1287. }
  1288. }
  1289. return searchArray;
  1290. }
  1291. //根据roomId查找群组
  1292. - (JXUserObject *)groupForRoomId:(NSString *)roomId{
  1293. NSString *sql = [NSString stringWithFormat:@"select * from friend where roomFlag=1 and roomId='%@'",roomId];
  1294. return [self doFetchOneGroup:sql];
  1295. }
  1296. - (JXUserObject *)doFetchOneGroup:(NSString*)sql
  1297. { JXUserObject *group = [[JXUserObject alloc] init];
  1298. NSString* myUserId = MY_USER_ID;
  1299. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1300. [super checkTableCreatedInDb:db];
  1301. FMResultSet *rs=[db executeQuery:sql];
  1302. while ([rs next]) {
  1303. JXUserObject *user=[[JXUserObject alloc] init];
  1304. [super userFromDataset:user rs:rs];
  1305. group = user;
  1306. }
  1307. [rs close];
  1308. return group;
  1309. }
  1310. //获取公众号
  1311. - (NSMutableArray *)searchPublic:(NSString *)searchtext{
  1312. NSString *sql = [NSString stringWithFormat:@"select * from friend where userType=2 and userNickname like '%%%@%%' order by timeCreate",searchtext];
  1313. return [self doFetch:sql];
  1314. }
  1315. //获取联系人和群聊
  1316. - (NSMutableArray *)getAllContactsAndGroup{
  1317. 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"];
  1318. return [self doFetch:sql];
  1319. }
  1320. //获取消息
  1321. - (NSMutableDictionary *)searchChatRecordWithText:(NSString *)text{
  1322. NSMutableDictionary *allMsg = [NSMutableDictionary dictionary];
  1323. NSMutableArray<JXUserObject *> *all = [self getAllContactsAndGroup];
  1324. for (NSInteger i = 0; i<all.count; i++) {
  1325. NSMutableArray *array = [self getSearchMsgWithUserId:all[i].userId withSearchText:text];
  1326. [allMsg setObject:array forKey:all[i].userId];
  1327. }
  1328. return allMsg;
  1329. }
  1330. - (NSMutableArray *)getSearchMsgWithUserId:(NSString *)userId withSearchText:(NSString *)searchtext{
  1331. NSString *sql = [NSString stringWithFormat:@"select * from msg_%@ where content like '%%%@%%' and type=1 order by timeSend desc",userId,searchtext];
  1332. NSMutableArray *array = [[NSMutableArray alloc] init];
  1333. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
  1334. FMResultSet *rs=[db executeQuery:sql];
  1335. while ([rs next]) {
  1336. JXMessageObject *p=[[JXMessageObject alloc] init];
  1337. [p fromRs:rs];
  1338. NSString *content = p.content;
  1339. NSMutableArray *contentArray = [NSMutableArray array];
  1340. [self getMessageRange:content :contentArray];
  1341. NSMutableArray *stringArray = [NSMutableArray array];
  1342. _num = 0;
  1343. [self splicingString:contentArray inArray:stringArray];
  1344. for (NSString *object in stringArray) {
  1345. if ([object hasSuffix:@"]"]&&[object hasPrefix:@"["]) {
  1346. }else{
  1347. if ([object localizedCaseInsensitiveContainsString:searchtext]) {
  1348. [array addObject:p];
  1349. break;
  1350. }
  1351. }
  1352. }
  1353. }
  1354. return array;
  1355. }
  1356. // 更新群组秘钥
  1357. - (BOOL)updateChatKeyGroup {
  1358. NSString* myUserId = MY_USER_ID;
  1359. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  1360. [self checkTableCreatedInDb:db];
  1361. NSString* sql = [NSString stringWithFormat:@"update %@ set chatKeyGroup=? where userId=?",_tableName];
  1362. BOOL worked = [db executeUpdate:sql,self.chatKeyGroup,self.userId];
  1363. return worked;
  1364. }
  1365. //排除表情包
  1366. - (void)getMessageRange:(NSString*)message :(NSMutableArray*)array {
  1367. NSRange range=[message rangeOfString: @"["];
  1368. NSRange range1=[message rangeOfString: @"]"];
  1369. // 动画过滤
  1370. if ([message isEqualToString:[NSString stringWithFormat:@"[%@]",Localized(@"emojiVC_Emoji")]]) {
  1371. [array addObject:message];
  1372. return;
  1373. }
  1374. //判断当前字符串是否还有表情的标志。
  1375. if (range.length>0 && range1.length>0 && range1.location > range.location) {
  1376. if (range.location > 0) {
  1377. NSString *str = [message substringToIndex:range.location];
  1378. NSString *str1 = [message substringFromIndex:range.location];
  1379. [array addObject:str];
  1380. [self getMessageRange:str1 :array];
  1381. }else {
  1382. NSString *emojiString = [message substringWithRange:NSMakeRange(range.location + 1, range1.location - 1)];
  1383. BOOL isEmoji = NO;
  1384. NSString *str;
  1385. NSString *str1;
  1386. for (NSMutableDictionary *dic in g_constant.emojiArray) {
  1387. NSString *emoji = [dic objectForKey:@"english"];
  1388. if ([emoji isEqualToString:emojiString]) {
  1389. isEmoji = YES;
  1390. break;
  1391. }
  1392. }
  1393. if (isEmoji) {
  1394. str = [message substringWithRange:NSMakeRange(range.location, range1.location + 1)];
  1395. str1 = [message substringFromIndex:range1.location + 1];
  1396. [array addObject:str];
  1397. }else{
  1398. NSString *posString = [message substringWithRange:NSMakeRange(range.location + 1, range1.location)];
  1399. NSRange posRange = [posString rangeOfString:@"["];
  1400. if (posRange.location != NSNotFound) {
  1401. str = [message substringToIndex:posRange.location + 1];
  1402. str1 = [message substringFromIndex:posRange.location + 1];
  1403. [array addObject:str];
  1404. }else{
  1405. str = [message substringToIndex:range.location + 1];
  1406. str1 = [message substringFromIndex:range.location + 1];
  1407. [array addObject:str];
  1408. }
  1409. }
  1410. [self getMessageRange:str1 :array];
  1411. }
  1412. }else if (range.length>0 && range1.length>0 && range1.location < range.location){
  1413. NSString *str = [message substringToIndex:range1.location + 1];
  1414. NSString *str1 = [message substringFromIndex:range1.location + 1];
  1415. [array addObject:str];
  1416. [self getMessageRange:str1 :array];
  1417. }else if (message != nil) {
  1418. [array addObject:message];
  1419. }
  1420. }
  1421. //拼接字符串
  1422. - (void)splicingString:(NSMutableArray *)array inArray:(NSMutableArray *)contentArray{
  1423. if (_num >= array.count) {
  1424. return;
  1425. }
  1426. NSString *str = [NSString string];
  1427. for (NSInteger i = _num; i < array.count; i++) {
  1428. NSString *object = array[i];
  1429. if ([object hasSuffix:@"]"]&&[object hasPrefix:@"["]) {
  1430. [contentArray addObject:str];
  1431. [contentArray addObject:object];
  1432. _num = i + 1;
  1433. break;
  1434. }else{
  1435. _num = i + 1;
  1436. str = [str stringByAppendingString:object];
  1437. if (_num >= array.count) {
  1438. [contentArray addObject:str];
  1439. return;
  1440. }
  1441. }
  1442. }
  1443. [self splicingString:array inArray:contentArray];
  1444. }
  1445. - (NSMutableArray *)fetchAllSearchRecordWithTable:(NSString *)tableName{
  1446. FMDatabase *db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
  1447. NSString *str = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@'('ID' INTEGER PRIMARY KEY AUTOINCREMENT,'record' TEXT NOT NULL)",tableName];
  1448. BOOL success = [db executeUpdate:str];
  1449. if (!success) {
  1450. NSLog(@"创建搜索记录表失败");
  1451. }
  1452. NSString *allRecord = [NSString stringWithFormat:@"select * from '%@' order by ID",tableName];
  1453. FMResultSet *rs = [db executeQuery:allRecord];
  1454. NSMutableArray *array = [NSMutableArray array];
  1455. while ([rs next]) {
  1456. NSString *record = [rs stringForColumn:@"record"];
  1457. if (record != nil && record != NULL) {
  1458. [array addObject:record];
  1459. }
  1460. }
  1461. return array;
  1462. }
  1463. - (BOOL)insertSearchRecord:(NSString *)searchRecord withTable:(NSString *)tableName{
  1464. FMDatabase *db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
  1465. NSString *create = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@'('ID' INTEGER PRIMARY KEY AUTOINCREMENT,'record' TEXT NOT NULL)",tableName];
  1466. BOOL createSuccess = [db executeUpdate:create];
  1467. if (!createSuccess) {
  1468. NSLog(@"创建搜索记录表失败");
  1469. }
  1470. [self deleteOneSearchRecord:searchRecord withTable:tableName];
  1471. NSString *record = [NSString stringWithFormat:@"INSERT INTO '%@' (record) VALUES (?)",tableName];
  1472. return [db executeUpdate:record,searchRecord];
  1473. }
  1474. - (BOOL)deleteOneSearchRecord:(NSString *)searchRecord withTable:(NSString *)tableName{
  1475. FMDatabase *db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
  1476. NSString *deleteOne = [NSString stringWithFormat:@"delete from '%@' where record = '%@'",tableName,searchRecord];
  1477. return [db executeUpdate:deleteOne];
  1478. }
  1479. - (BOOL)deleteAllSearchRecordWithTable:(NSString *)tableName{
  1480. FMDatabase *db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
  1481. NSString *deleteAll = [NSString stringWithFormat:@"delete from '%@'",tableName];
  1482. return [db executeUpdate:deleteAll];
  1483. }
  1484. @end