GDBManager.m 60 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607
  1. //
  2. // GDBManager.m
  3. // TUIContact
  4. //
  5. // Created by gan on 2025/3/24.
  6. //
  7. #import <Foundation/Foundation.h>
  8. #import "GDBManager.h"
  9. #import "UDManager.h"
  10. #import "FMDB.h"
  11. #import "config.h"
  12. @interface GDBManager ()
  13. @property (nonatomic, strong) FMDatabase *db;
  14. @property (nonatomic) BOOL isOpen;
  15. @end
  16. @implementation GDBManager
  17. + (GDBManager *_Nonnull)shareInstance{
  18. static id gShareInstance = nil;
  19. static dispatch_once_t onceToken;
  20. dispatch_once(&onceToken, ^{
  21. gShareInstance = [[self alloc] init];
  22. });
  23. return gShareInstance;
  24. }
  25. - (instancetype)init {
  26. if (self = [super init]) {
  27. self.isOpen = false;
  28. }
  29. return self;
  30. }
  31. #pragma mark - Public -
  32. -(void)createDatabase:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  33. // 数据库文件路径,这里使用文档目录下的数据库文件,确保数据持久化
  34. NSString *docsDir;
  35. NSArray *dirPaths;
  36. // 获取文档目录路径
  37. dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  38. docsDir = [dirPaths objectAtIndex:0];
  39. NSString *dbPath = [[docsDir stringByAppendingPathComponent:locateDB] stringByStandardizingPath];
  40. // 创建数据库实例,如果数据库文件不存在,则会自动创建该文件
  41. self.db = [FMDatabase databaseWithPath:dbPath];
  42. if (![self.db open]) {
  43. NSLog(@"数据库打开失败");
  44. if(fail){
  45. fail([NSString stringWithFormat:@"数据库打开失败: %@", [self.db lastErrorMessage]]);
  46. }
  47. } else {
  48. NSLog(@"数据库打开成功");
  49. if(succ){
  50. succ(nil);
  51. }
  52. self.isOpen = true;
  53. }
  54. }
  55. -(void)closeDB{
  56. [self.db close];
  57. self.isOpen = false;
  58. }
  59. -(void)deleteDB{
  60. // 数据库文件路径,这里使用文档目录下的数据库文件,确保数据持久化
  61. [self closeDB];
  62. NSString *docsDir;
  63. NSArray *dirPaths;
  64. // 获取文档目录路径
  65. dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  66. docsDir = [dirPaths objectAtIndex:0];
  67. NSString *dbPath = [[docsDir stringByAppendingPathComponent:locateDB] stringByStandardizingPath];
  68. NSError *error;
  69. NSFileManager *fileManager = [NSFileManager defaultManager];
  70. BOOL success = [fileManager removeItemAtPath:dbPath error:&error];
  71. if (success) {
  72. NSLog(@"文件删除成功");
  73. self.isOpen = false;
  74. } else {
  75. NSLog(@"文件删除失败: %@", error.localizedDescription);
  76. }
  77. }
  78. -(void)replayAllData{
  79. int lowerBound = 10;
  80. int upperBound = 30;
  81. int randomInt = lowerBound + arc4random() % (upperBound - lowerBound + 1);
  82. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  83. for (NSInteger i = 0; i<randomInt; i++) {
  84. [self delLocalmsglistTable:userid];
  85. [self createLocalMSGtable:nil fail:nil];
  86. NSUUID *uid = [NSUUID UUID];
  87. NSDate *now = [NSDate date];
  88. NSTimeInterval trt = [now timeIntervalSince1970];
  89. NSInteger time = trt*1000;
  90. NSString *strtime = [NSString stringWithFormat:@"%ld",(long)time];
  91. NSDictionary *dic =@{
  92. @"id":strtime,
  93. @"messageType":MessageType_image,
  94. @"chatId":[NSString stringWithFormat:@"%d",randomInt],
  95. @"fromId":userid,
  96. @"fromName":userid,
  97. @"fromAvatar":@"Avatar",
  98. @"reSend":[NSNumber numberWithBool:false],
  99. @"content":uid.UUIDString,
  100. @"type":@"0",
  101. @"localtime":strtime,
  102. @"timestamp":strtime,
  103. @"mine":[NSNumber numberWithBool:YES],
  104. @"extend":@{
  105. @"url":uid.UUIDString,
  106. @"time":strtime,
  107. @"localurl":uid.UUIDString,
  108. }
  109. };
  110. [self insertLocalmsg:dic succ:nil fail:nil];
  111. NSLog(@"delLocalmsglistTable:%ld",(long)i);
  112. }
  113. randomInt = lowerBound + arc4random() % (upperBound - lowerBound + 1);
  114. for (NSInteger i = 0; i<randomInt; i++) {
  115. [self delchatlistTable:nil fail:nil];
  116. [self createChattable:nil fail:nil];
  117. NSUUID *uid = [NSUUID UUID];
  118. NSDate *now = [NSDate date];
  119. NSTimeInterval trt = [now timeIntervalSince1970];
  120. NSInteger time = trt*1000;
  121. NSString *strtime = [NSString stringWithFormat:@"%ld",(long)time];
  122. NSDictionary *chatD=@{
  123. @"id":strtime,
  124. @"name":userid,
  125. @"avatar":@"avatar",
  126. @"type":@"0",
  127. @"lastMessage":uid.UUIDString,
  128. @"lastTime":strtime,
  129. @"unreadCount":[NSString stringWithFormat:@"%ld",(long)i],
  130. @"loaded":@"",
  131. @"loading":@"",
  132. @"top":@"true",
  133. };
  134. [self insertLocalchat:chatD succ:nil fail:nil];
  135. NSLog(@"delchatlistTable:%ld",(long)i);
  136. }
  137. randomInt = lowerBound + arc4random() % (upperBound - lowerBound + 1);
  138. for (NSInteger i = 0; i<randomInt; i++) {
  139. [self createLastreadtimetable:nil fail:nil];
  140. [self deleatLastreadtimetable];
  141. NSLog(@"deleatLastreadtimetable:%ld",(long)i);
  142. }
  143. randomInt = lowerBound + arc4random() % (upperBound - lowerBound + 1);
  144. for (NSInteger i = 0; i<randomInt; i++) {
  145. [self createCallmsgTable];
  146. [self deleteCallmsgTable];
  147. NSLog(@"deleatFirendtable:%ld",(long)i);
  148. }
  149. randomInt = lowerBound + arc4random() % (upperBound - lowerBound + 1);
  150. for (NSInteger i = 0; i<randomInt; i++) {
  151. [self createfirendsTable];
  152. [self deleatFirendtable];
  153. NSLog(@"deleatFirendtable:%ld",(long)i);
  154. }
  155. randomInt = lowerBound + arc4random() % (upperBound - lowerBound + 1);
  156. for (NSInteger i = 0; i<randomInt; i++) {
  157. [self deleteDB];
  158. [self createDatabase:nil fail:nil];
  159. NSLog(@"deleteDB:%ld",(long)i);
  160. }
  161. }
  162. //创建消息表
  163. -(void)createLocalMSGtable:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail;{
  164. // 创建表语句
  165. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  166. NSString *sql1=@"create table if not exists lcmsglist_";
  167. NSString *tablejg = @"(id CHAR PRIMARY KEY,chatId CHAR,type CHAR,messageType CHAR,timestamp BIGINT,localtime BIGINT,Message TEXT)";
  168. NSString *sql = [NSString stringWithFormat:@"%@%@ %@",sql1,userid,tablejg];
  169. //NSLog(@"sql:%@",sql);
  170. BOOL success = [self.db executeUpdate:sql];
  171. if (!success) {
  172. NSLog(@"创建消息表失败: %@", [self.db lastErrorMessage]);
  173. if(fail){
  174. fail([NSString stringWithFormat:@"创建消息表失败: %@", [self.db lastErrorMessage]]);
  175. }
  176. } else {
  177. NSLog(@"创建消息表成功");
  178. if (succ) {
  179. succ(nil);
  180. }
  181. }
  182. }
  183. -(void)delLocalmsglistTable:(NSString *)userid{//删除消息表
  184. NSString *sql1=@"DROP TABLE lcmsglist_";
  185. NSString *sql = [NSString stringWithFormat:@"%@%@",sql1,userid];
  186. BOOL success = [self.db executeUpdate:sql];
  187. if (!success) {
  188. NSLog(@"删除消息表失败: %@", [self.db lastErrorMessage]);
  189. } else {
  190. NSLog(@"删除消息表成功");
  191. }
  192. }
  193. -(void)insertLocalmsg:(NSDictionary *_Nonnull)msg succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{//插入消息
  194. NSString *vstr = @"insert into lcmsglist_";
  195. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  196. NSDictionary * safeDict = [self replaceNullsWithEmptyStringInDictionary:msg];
  197. vstr=[NSString stringWithFormat:@"%@%@%@",vstr,userid,@" ('id','chatId','type','messageType','timestamp','localtime','Message') values ("];
  198. vstr=[NSString stringWithFormat:@"%@%@,",vstr,safeDict[@"id"]];
  199. vstr=[NSString stringWithFormat:@"%@%@,",vstr,safeDict[@"chatId"]];
  200. vstr=[NSString stringWithFormat:@"%@%@,",vstr,safeDict[@"type"]];
  201. vstr=[NSString stringWithFormat:@"%@%@,",vstr,safeDict[@"messageType"]];
  202. vstr=[NSString stringWithFormat:@"%@%@,",vstr,safeDict[@"timestamp"]];
  203. vstr=[NSString stringWithFormat:@"%@%@,",vstr,safeDict[@"localtime"]];
  204. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:msg options:0 error:nil];
  205. NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  206. vstr=[NSString stringWithFormat:@"%@'%@'%@",vstr,jsonString,@")"];
  207. // NSLog(@"vstr:%@",vstr);
  208. BOOL success = [self.db executeUpdate:vstr];
  209. if (!success) {
  210. if(fail){
  211. fail([NSString stringWithFormat:@"插入消息表失败: %@", [self.db lastErrorMessage]]);
  212. }
  213. NSLog(@"插入消息表失败: %@", [self.db lastErrorMessage]);
  214. } else {
  215. NSLog(@"插入消息表成功");
  216. if (succ) {
  217. succ(nil);
  218. }
  219. }
  220. }
  221. -(void)insertRplaceLocalmsg:(NSDictionary *_Nonnull)msg succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{//插入消息
  222. if (![self.db isOpen]) {
  223. return;
  224. }
  225. // 1. 参数校验
  226. if (!msg || msg.count == 0) {
  227. if (fail) fail(@"消息内容不能为空");
  228. return;
  229. }
  230. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  231. if (userid.length == 0) {
  232. if (fail) fail(@"用户ID获取失败");
  233. return;
  234. }
  235. NSString *tableName = [NSString stringWithFormat:@"lcmsglist_%@", userid];
  236. NSDictionary *safeDict = [self replaceNullsWithEmptyStringInDictionary:msg];
  237. // 2. 处理localtime
  238. NSString *localtime = [NSString stringWithFormat:@"%@", safeDict[@"localtime"]];
  239. // if (localtime.length == 0) {
  240. // localtime = safeDict[@"timestamp"];
  241. // }
  242. // 2. 处理图片文件视频消息可能存在乱序问题
  243. NSString *msgtype = safeDict[@"messageType"];
  244. BOOL urlMark = true;
  245. if([msgtype isEqualToString:MessageType_image]||[msgtype isEqualToString:MessageType_file]||[msgtype isEqualToString:MessageType_video]){
  246. // 文件消息
  247. NSDictionary * extend = [safeDict[@"extend"] isKindOfClass:NSDictionary.class]?safeDict[@"extend"]:@{};
  248. NSString *url=extend[@"url"] ?: @"";
  249. if(url.length==0){
  250. urlMark=false;//不是正式真实消息尝试插入,不能删除已有的信息
  251. }
  252. NSString *fileEER = extend[@"fileError"] ?: @"";
  253. if(fileEER.intValue==1){
  254. urlMark=true;//不是正式真实消息尝试插入,不能删除已有的信息
  255. }
  256. }
  257. // 3. 开启事务
  258. [self.db beginTransaction];
  259. BOOL shouldRollback = NO;
  260. @try {
  261. // NSLog(@"删除旧数据(localtime=%@)", localtime);
  262. NSString *selctSQL = [NSString stringWithFormat:@"SELECT * FROM %@ WHERE localtime = %@ AND (messageType='11' OR messageType='12')",tableName,localtime];
  263. FMResultSet *rs = [self.db executeQuery:selctSQL];
  264. BOOL markesel=NO;
  265. while ([rs next]) {
  266. //NSLog(@"rs:%@",rs);
  267. NSString *msg =[rs stringForColumn:@"Message"];
  268. NSLog(@"--------rsmsg:%@",msg);
  269. markesel=YES;
  270. break;
  271. }
  272. [rs close]; // 关闭结果集
  273. if(markesel){
  274. [self.db commit];
  275. return;
  276. }
  277. if(urlMark){//删除旧数据,以便更新信息
  278. // NSLog(@"删除旧数据(2localtime=%@)", localtime);
  279. // 4. 删除相同localtime的旧数据
  280. NSString *deleteSQL = [NSString stringWithFormat:
  281. @"DELETE FROM %@ WHERE localtime = ?",
  282. tableName];
  283. if (![self.db executeUpdate:deleteSQL, localtime]) {
  284. // NSLog(@"删除旧数据失败(localtime=%@): %@", localtime, [self.db lastErrorMessage]);
  285. // 不终止,继续尝试插入
  286. }
  287. }
  288. // 5. 准备插入数据
  289. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:safeDict options:0 error:nil];
  290. NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  291. NSString *insertSQL = [NSString stringWithFormat:
  292. @"INSERT INTO %@ (id,chatId,type,messageType,timestamp,localtime,Message) VALUES (?,?,?,?,?,?,?)",
  293. tableName];
  294. // 6. 执行插入
  295. BOOL success = [self.db executeUpdate:insertSQL,
  296. safeDict[@"id"],
  297. safeDict[@"chatId"],
  298. safeDict[@"type"],
  299. safeDict[@"messageType"],
  300. safeDict[@"timestamp"],
  301. localtime,
  302. jsonString];
  303. if (!success) {
  304. shouldRollback = YES;
  305. NSString *error = [NSString stringWithFormat:@"插入消息失败: %@", [self.db lastErrorMessage]];
  306. if (fail) fail(error);
  307. } else {
  308. [self.db commit];
  309. if (succ) succ(nil);
  310. // NSLog(@"消息插入成功(ID=%@)", safeDict);
  311. }
  312. }
  313. @catch (NSException *exception) {
  314. shouldRollback = YES;
  315. NSString *error = [NSString stringWithFormat:@"操作异常: %@", exception.reason];
  316. if (fail) fail(error);
  317. }
  318. @finally {
  319. if (shouldRollback) {
  320. [self.db rollback];
  321. }
  322. }
  323. }
  324. - (void)batchInsertLocalMessages:(NSArray<NSDictionary *> *)messages
  325. success:(DBSucc _Nullable)succ
  326. failure:(DBFail _Nullable)fail {
  327. if (![self.db isOpen]) {
  328. return;
  329. }
  330. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  331. NSString *tableName = [NSString stringWithFormat:@"lcmsglist_%@", userid];
  332. // 开启事务
  333. [self.db beginTransaction];
  334. NSMutableArray *failedMessages = [NSMutableArray array];
  335. BOOL hasErrors = NO;
  336. @try {
  337. // 准备SQL语句(使用参数化查询,避免SQL注入)
  338. NSString *insertSQL = [NSString stringWithFormat:
  339. @"INSERT INTO %@ ('id','chatId','type','messageType','timestamp','localtime','Message') VALUES (?,?,?,?,?,?,?)",
  340. tableName];
  341. for (NSDictionary *msg in messages) {
  342. NSDictionary *safeDict = [self replaceNullsWithEmptyStringInDictionary:msg];
  343. NSString *localtime = [NSString stringWithFormat:@"%@", safeDict[@"localtime"]];
  344. NSString *selctSQL = [NSString stringWithFormat:@"SELECT * FROM %@ WHERE localtime = %@ AND (messageType='11' OR messageType='12')",tableName,localtime];
  345. FMResultSet *rs = [self.db executeQuery:selctSQL];
  346. BOOL markesel=NO;
  347. while ([rs next]) {
  348. //NSLog(@"rs:%@",rs);
  349. NSString *msg =[rs stringForColumn:@"Message"];
  350. // NSLog(@"--------rsmsg:%@",msg);
  351. markesel=YES;
  352. break;
  353. }
  354. [rs close]; // 关闭结果集
  355. if(markesel){
  356. continue;
  357. }
  358. NSString *deleteSQL = [NSString stringWithFormat:
  359. @"DELETE FROM %@ WHERE localtime = ?",
  360. tableName];
  361. if (![self.db executeUpdate:deleteSQL, localtime]) {
  362. // NSLog(@"batchInsertLocalMessages 删除旧数据失败(localtime=%@): %@", localtime, [self.db lastErrorMessage]);
  363. // 不终止,继续尝试插入
  364. }
  365. else{
  366. // NSLog(@"batchInsertLocalMessages 删除旧数据(localtime=%@): %@", localtime, [self.db lastErrorMessage]);
  367. }
  368. // 准备Message字段的JSON字符串
  369. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:safeDict options:0 error:nil];
  370. NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  371. // 执行插入(使用参数化查询)
  372. BOOL success = [self.db executeUpdate:insertSQL,
  373. safeDict[@"id"],
  374. safeDict[@"chatId"],
  375. safeDict[@"type"],
  376. safeDict[@"messageType"],
  377. safeDict[@"timestamp"],
  378. safeDict[@"localtime"],
  379. jsonString];
  380. if (!success) {
  381. hasErrors = YES;
  382. // 记录失败的消息
  383. // 继续下一条
  384. continue;
  385. }
  386. }
  387. // 提交事务
  388. [self.db commit];
  389. NSLog(@"批量插入消息完成,成功 %lu 条,失败 %lu 条",
  390. (unsigned long)(messages.count - failedMessages.count),
  391. (unsigned long)failedMessages.count);
  392. if (succ) {
  393. // 如果有失败记录,返回失败信息
  394. if (failedMessages.count > 0) {
  395. succ(@[@{
  396. @"successCount": @(messages.count - failedMessages.count),
  397. @"failedCount": @(failedMessages.count),
  398. @"failedMessages": failedMessages
  399. }]);
  400. } else {
  401. succ(nil);
  402. }
  403. }
  404. }
  405. @catch (NSException *exception) {
  406. [self.db rollback];
  407. NSString *error = [NSString stringWithFormat:@"批量插入本地异常: %@", exception.reason];
  408. if (fail) {
  409. fail(error);
  410. }
  411. NSLog(@"%@", error);
  412. }
  413. }
  414. -(void)selectLocalmsg:(NSString *_Nonnull)chatId page:(NSInteger)page succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{//查询消息
  415. // 查询数据
  416. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  417. NSString *vstr = @"select * from lcmsglist_";
  418. vstr=[NSString stringWithFormat:@"%@%@%@",vstr,userid,@" where chatId = "];
  419. vstr=[NSString stringWithFormat:@"%@%@",vstr,chatId];
  420. vstr=[NSString stringWithFormat:@"%@ %@",vstr,@"ORDER BY timestamp DESC LIMIT 16;"];
  421. NSLog(@"vstr:%@",vstr);
  422. FMResultSet *rs = [self.db executeQuery:vstr];
  423. NSMutableArray *array=[[NSMutableArray alloc] init];
  424. while ([rs next]) {
  425. //NSLog(@"rs:%@",rs);
  426. NSString *msg =[rs stringForColumn:@"Message"];
  427. //NSLog(@"msg:%@",msg);
  428. NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
  429. NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
  430. // NSLog(@"%@",jsonDict);
  431. // Message *msgobj = [[Message alloc] init];
  432. // [msgobj setValuesWithDictionary:jsonDict];
  433. [array addObject:jsonDict];
  434. }
  435. [rs close]; // 关闭结果集
  436. if(succ){
  437. succ(array);
  438. }
  439. }
  440. -(void)selectnextmsg:(NSString *_Nonnull)chatId timestp:(NSInteger)timestp succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{//查询消息
  441. // 查询数据
  442. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  443. NSString *vstr = @"select * from lcmsglist_";
  444. vstr=[NSString stringWithFormat:@"%@%@%@",vstr,userid,@" where chatId = "];
  445. vstr=[NSString stringWithFormat:@"%@%@%@",vstr,chatId,@" AND timestamp < "];
  446. vstr=[NSString stringWithFormat:@"%@%ld",vstr,(long)timestp];
  447. vstr=[NSString stringWithFormat:@"%@ %@",vstr,@"ORDER BY timestamp DESC LIMIT 16;"];
  448. // NSLog(@"vstr:%@",vstr);
  449. FMResultSet *rs = [self.db executeQuery:vstr];
  450. NSMutableArray *array=[[NSMutableArray alloc] init];
  451. while ([rs next]) {
  452. //NSLog(@"rs:%@",rs);
  453. NSString *msg =[rs stringForColumn:@"Message"];
  454. //NSLog(@"msg:%@",msg);
  455. NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
  456. NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
  457. // NSLog(@"%@",jsonDict);
  458. // Message *msgobj = [[Message alloc] init];
  459. // [msgobj setValuesWithDictionary:jsonDict];
  460. [array addObject:jsonDict];
  461. }
  462. [rs close]; // 关闭结果集
  463. if(succ){
  464. succ(array);
  465. }
  466. }
  467. -(void)deleteMyLocalmsg:(NSDictionary *)msg{//删除单个消息 DELETE FROM users WHERE id IN (100, 101);
  468. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  469. NSString *vstr = @"DELETE FROM lcmsglist_";
  470. vstr=[NSString stringWithFormat:@"%@%@%@",vstr,userid,@" WHERE id=="];
  471. vstr=[NSString stringWithFormat:@"%@%@",vstr,msg[@"localtime"]];
  472. BOOL success = [self.db executeUpdate:vstr];
  473. if (!success) {
  474. NSLog(@"删除消息表失败: %@", [self.db lastErrorMessage]);
  475. } else {
  476. NSLog(@"删除消息表成功");
  477. }
  478. }
  479. -(void)deleteLocalmsg:(NSDictionary *_Nullable)msg{
  480. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  481. NSString *vstr = @"DELETE FROM lcmsglist_";
  482. vstr=[NSString stringWithFormat:@"%@%@%@",vstr,userid,@" WHERE id=="];
  483. vstr=[NSString stringWithFormat:@"%@%@",vstr,msg[@"id"]];
  484. BOOL success = [self.db executeUpdate:vstr];
  485. if (!success) {
  486. NSLog(@"删除指定消息: %@", [self.db lastErrorMessage]);
  487. } else {
  488. NSLog(@"删除指定消息成功");
  489. }
  490. }
  491. -(void)selectLocalmsgType:(NSString *)chatId messageType:(NSString *)messageType succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{//按分类查询消息
  492. // 查询数据
  493. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  494. NSString *vstr = @"select * from lcmsglist_";
  495. vstr=[NSString stringWithFormat:@"%@%@%@",vstr,userid,@" where chatId = "];
  496. vstr=[NSString stringWithFormat:@"%@%@ AND messageType=",vstr,chatId];
  497. vstr=[NSString stringWithFormat:@"%@%@",vstr,messageType];
  498. vstr=[NSString stringWithFormat:@"%@ %@",vstr,@"ORDER BY timestamp DESC LIMIT 16;"];
  499. //NSLog(@"vstr:%@",vstr);
  500. FMResultSet *rs = [self.db executeQuery:vstr];
  501. NSMutableArray *array=[[NSMutableArray alloc] init];
  502. while ([rs next]) {
  503. //NSLog(@"rs:%@",rs);
  504. NSString *msg =[rs stringForColumn:@"Message"];
  505. //NSLog(@"msg:%@",msg);
  506. NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
  507. if (data) {
  508. NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
  509. [array addObject:jsonDict];
  510. }
  511. }
  512. [rs close]; // 关闭结果集
  513. if(succ){
  514. succ(array);
  515. }
  516. }
  517. -(void)selectNextmsgType:(NSString *_Nullable)chatId messageType:(NSString *_Nullable)messageType timestp:(NSInteger)timestp succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  518. // 查询数据
  519. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  520. NSString *vstr = @"select * from lcmsglist_";
  521. vstr=[NSString stringWithFormat:@"%@%@%@",vstr,userid,@" where chatId = "];
  522. vstr=[NSString stringWithFormat:@"%@%@ AND messageType=",vstr,chatId];
  523. vstr=[NSString stringWithFormat:@"%@%@ AND timestamp < ",vstr,messageType];
  524. vstr=[NSString stringWithFormat:@"%@%ld",vstr,(long)timestp];
  525. vstr=[NSString stringWithFormat:@"%@ %@",vstr,@"ORDER BY timestamp DESC LIMIT 16;"];
  526. NSLog(@"vstr:%@",vstr);
  527. FMResultSet *rs = [self.db executeQuery:vstr];
  528. NSMutableArray *array=[[NSMutableArray alloc] init];
  529. while ([rs next]) {
  530. //NSLog(@"rs:%@",rs);
  531. NSString *msg =[rs stringForColumn:@"Message"];
  532. //NSLog(@"msg:%@",msg);
  533. NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
  534. if (data) {
  535. NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
  536. [array addObject:jsonDict];
  537. }
  538. }
  539. [rs close]; // 关闭结果集
  540. if(succ){
  541. succ(array);
  542. }
  543. }
  544. //根据本地时间查询本地消息
  545. -(void)selectLocalmsgWithLocaltime:(NSString *_Nullable)localtime succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  546. // 查询数据
  547. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  548. NSString *vstr = @"select * from lcmsglist_";
  549. vstr=[NSString stringWithFormat:@"%@%@%@",vstr,userid,@" where localtime = "];
  550. vstr=[NSString stringWithFormat:@"%@%@",vstr,localtime];;
  551. NSLog(@"vstr:%@",vstr);
  552. FMResultSet *rs = [self.db executeQuery:vstr];
  553. NSMutableArray *array=[[NSMutableArray alloc] init];
  554. while ([rs next]) {
  555. //NSLog(@"rs:%@",rs);
  556. NSString *msg =[rs stringForColumn:@"Message"];
  557. //NSLog(@"msg:%@",msg);
  558. NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
  559. if (data) {
  560. NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
  561. [array addObject:jsonDict];
  562. }
  563. }
  564. [rs close]; // 关闭结果集
  565. if(succ){
  566. succ(array);
  567. }
  568. }
  569. //聊天窗表lcChatlist_
  570. -(void)createChattable:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  571. // 创建表语句
  572. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  573. NSString *sql1=@"create table if not exists lcChatlist_";
  574. NSString *tablejg = @"(id CHAR PRIMARY KEY,name CHAR,avatar CHAR,type CHAR,lastMessage TEXT,lastTime BIGINT,unreadCount int,loaded int,loading int,top int)";
  575. NSString *sql = [NSString stringWithFormat:@"%@%@ %@",sql1,userid,tablejg];
  576. //NSLog(@"sql:%@",sql);
  577. BOOL success = [self.db executeUpdate:sql];
  578. if (!success) {
  579. NSLog(@"创建lcChatlist_表失败: %@", [self.db lastErrorMessage]);
  580. if(fail){
  581. fail([NSString stringWithFormat:@"创建消息表失败: %@", [self.db lastErrorMessage]]);
  582. }
  583. } else {
  584. NSLog(@"创建lcChatlist_表成功");
  585. if (succ) {
  586. succ(nil);
  587. }
  588. }
  589. }
  590. -(void)delchatlistTable:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{//删除聊天窗表lcChatlist_
  591. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  592. NSString *sql1=@"DROP TABLE lcChatlist_";
  593. NSString *sql = [NSString stringWithFormat:@"%@%@",sql1,userid];
  594. BOOL success = [self.db executeUpdate:sql];
  595. if (!success) {
  596. NSLog(@"删除lcChatlist_表失败: %@", [self.db lastErrorMessage]);
  597. if(fail){
  598. fail([NSString stringWithFormat:@"创建消息表失败: %@", [self.db lastErrorMessage]]);
  599. }
  600. } else {
  601. NSLog(@"删除lcChatlist_表成功");
  602. if (succ) {
  603. succ(nil);
  604. }
  605. }
  606. }
  607. -(void)insertLocalchat:(NSDictionary *_Nonnull)msg succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  608. NSString *vstr = @"INSERT OR REPLACE INTO lcChatlist_";
  609. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  610. vstr=[NSString stringWithFormat:@"%@%@%@",vstr,userid,@" ('id','name','avatar','type','lastMessage','lastTime','unreadCount','loaded','loading','top') values ("];
  611. NSDictionary * safeDict = [self replaceNullsWithEmptyStringInDictionary:msg];
  612. vstr=[NSString stringWithFormat:@"%@'%@',",vstr,safeDict[@"id"]];
  613. vstr=[NSString stringWithFormat:@"%@'%@',",vstr,safeDict[@"name"]];
  614. vstr=[NSString stringWithFormat:@"%@'%@',",vstr,safeDict[@"avatar"]];
  615. vstr=[NSString stringWithFormat:@"%@%@,",vstr,safeDict[@"type"]];
  616. vstr=[NSString stringWithFormat:@"%@'%@',",vstr,safeDict[@"lastMessage"]];
  617. vstr=[NSString stringWithFormat:@"%@'%@',",vstr,safeDict[@"lastTime"]];
  618. vstr=[NSString stringWithFormat:@"%@%@,",vstr,safeDict[@"unreadCount"]];
  619. vstr=[NSString stringWithFormat:@"%@'%@',",vstr,safeDict[@"loaded"]];
  620. vstr=[NSString stringWithFormat:@"%@'%@',",vstr,safeDict[@"loading"]];
  621. vstr=[NSString stringWithFormat:@"%@'%@')",vstr,safeDict[@"top"]];
  622. NSLog(@"vstr:%@",vstr);
  623. BOOL success = [self.db executeUpdate:vstr];
  624. if (!success) {
  625. if(fail){
  626. fail([NSString stringWithFormat:@"插入消息表失败: %@", [self.db lastErrorMessage]]);
  627. }
  628. //NSLog(@"插入消息表失败: %@", [self.db lastErrorMessage]);
  629. } else {
  630. // NSLog(@"插入消息表成功 insertLocalchat");
  631. if (succ) {
  632. succ(nil);
  633. }
  634. }
  635. }
  636. -(void)selectLocalchats:(NSString *)top succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  637. // 查询数据
  638. NSString *vstr = @"select * from lcChatlist_";
  639. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  640. vstr=[NSString stringWithFormat:@"%@%@",vstr,userid];
  641. vstr=[NSString stringWithFormat:@"%@ %@",vstr,@"where top="];
  642. vstr=[NSString stringWithFormat:@"%@%@",vstr,top];
  643. vstr=[NSString stringWithFormat:@"%@ %@",vstr,@"ORDER BY 'lastTime' ASC"];
  644. NSLog(@"vstr:%@",vstr);
  645. FMResultSet *rs = [self.db executeQuery:vstr];
  646. NSMutableArray *array=[[NSMutableArray alloc] init];
  647. while ([rs next]) {
  648. NSDictionary *chatD=@{
  649. @"id":[rs stringForColumn:@"id"],
  650. @"name":[rs stringForColumn:@"name"],
  651. @"avatar":[rs stringForColumn:@"avatar"],
  652. @"type":[rs stringForColumn:@"type"],
  653. @"lastMessage":[rs stringForColumn:@"lastMessage"],
  654. @"lastTime":[rs stringForColumn:@"lastTime"],
  655. @"unreadCount":[rs stringForColumn:@"unreadCount"],
  656. @"loaded":[rs stringForColumn:@"loaded"],
  657. @"loading":[rs stringForColumn:@"loading"],
  658. @"top":[rs stringForColumn:@"top"]
  659. };
  660. [array addObject:chatD];
  661. }
  662. [rs close]; // 关闭结果集
  663. if(succ){
  664. succ(array);
  665. }
  666. }
  667. - (void)deleteChatListItem:(NSDictionary *_Nonnull)item succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  668. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  669. NSString *vstr = @"DELETE FROM lcChatlist_";
  670. vstr=[NSString stringWithFormat:@"%@%@%@",vstr,userid,@" WHERE id="];
  671. vstr=[NSString stringWithFormat:@"%@%@",vstr,item[@"id"]];
  672. BOOL success = [self.db executeUpdate:vstr];
  673. if (!success) {
  674. NSLog(@"删除消息表失败: %@", [self.db lastErrorMessage]);
  675. if(fail){
  676. fail([NSString stringWithFormat:@"删除消息表失败: %@", [self.db lastErrorMessage]]);
  677. }
  678. } else {
  679. int changes = [self.db changes];
  680. if (changes > 0) {
  681. NSLog(@"成功删除 %d 条记录", changes);
  682. if (succ) {
  683. succ(nil);
  684. }
  685. } else {
  686. NSLog(@"没有匹配的记录被删除");
  687. }
  688. }
  689. }
  690. //聊天窗最后已读时间表
  691. -(void)createLastreadtimetable:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  692. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  693. NSString *sql1=@"create table if not exists lcChatlasttime_";
  694. NSString *tablejg = @"(chatId CHAR PRIMARY KEY,userId CHAR,timestamp BIGINT,type CHAR)";
  695. NSString *sql = [NSString stringWithFormat:@"%@%@ %@",sql1,userid,tablejg];
  696. //NSLog(@"sql:%@",sql);
  697. BOOL success = [self.db executeUpdate:sql];
  698. if (!success) {
  699. NSLog(@"创建lcChatlasttime_表失败: %@", [self.db lastErrorMessage]);
  700. if(fail){
  701. fail([NSString stringWithFormat:@"创建消息表失败: %@", [self.db lastErrorMessage]]);
  702. }
  703. } else {
  704. NSLog(@"创建lcChatlasttime_表成功");
  705. if (succ) {
  706. succ(nil);
  707. }
  708. }
  709. }
  710. -(void)deleatLastreadtimetable{
  711. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  712. NSString *sql1=@"DROP TABLE lcChatlasttime_";
  713. NSString *sql = [NSString stringWithFormat:@"%@%@",sql1,userid];
  714. BOOL success = [self.db executeUpdate:sql];
  715. if (!success) {
  716. NSLog(@"删除lcChatlasttime_表失败: %@", [self.db lastErrorMessage]);
  717. } else {
  718. NSLog(@"删除lcChatlasttime_表成功");
  719. }
  720. }
  721. -(void)insertLastreadtime:(NSDictionary *_Nonnull)msg succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  722. NSString *vstr = @"INSERT OR REPLACE INTO lcChatlasttime_";
  723. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  724. vstr=[NSString stringWithFormat:@"%@%@%@",vstr,userid,@" ('chatId','userId','timestamp','type') values ("];
  725. vstr=[NSString stringWithFormat:@"%@'%@',",vstr,msg[@"chatId"]];
  726. vstr=[NSString stringWithFormat:@"%@'%@',",vstr,msg[@"userId"]];
  727. vstr=[NSString stringWithFormat:@"%@'%@',",vstr,msg[@"timestamp"]];
  728. vstr=[NSString stringWithFormat:@"%@'%@')",vstr,msg[@"type"]];
  729. NSLog(@"vstr:%@",vstr);
  730. BOOL success = [self.db executeUpdate:vstr];
  731. if (!success) {
  732. if(fail){
  733. fail([NSString stringWithFormat:@"插入Lastreadtime表失败: %@", [self.db lastErrorMessage]]);
  734. }
  735. NSLog(@"插入消息表失败: %@", [self.db lastErrorMessage]);
  736. } else {
  737. NSLog(@"插入Lastreadtime表成功 insertLocalchat");
  738. if (succ) {
  739. succ(nil);
  740. }
  741. }
  742. }
  743. -(void)selectchatLastreadtime:(NSString *_Nonnull)chatId succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  744. // 查询数据
  745. NSString *vstr = @"select * from lcChatlasttime_";
  746. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  747. vstr=[NSString stringWithFormat:@"%@%@",vstr,userid];
  748. vstr=[NSString stringWithFormat:@"%@ %@%@",vstr,@"where userId=",chatId];
  749. NSLog(@"vstr:%@",vstr);
  750. FMResultSet *rs = [self.db executeQuery:vstr];
  751. NSMutableArray *array=[[NSMutableArray alloc] init];
  752. while ([rs next]) {
  753. NSDictionary *chatD=@{
  754. @"chatId":[rs stringForColumn:@"chatId"],
  755. @"userId":[rs stringForColumn:@"userId"],
  756. @"timestamp":[rs stringForColumn:@"timestamp"],
  757. @"type":[rs stringForColumn:@"type"]
  758. };
  759. [array addObject:chatD];
  760. }
  761. [rs close]; // 关闭结果集
  762. if(succ){
  763. succ(array);
  764. }
  765. }
  766. //安博通用户服务器表
  767. -(void)createlcUserServerTable{
  768. NSString *sql1=@"create table if not exists lcUserServer";
  769. NSString *tablejg = @"(id INTEGER PRIMARY KEY AUTOINCREMENT,userId CHAR,userName CHAR,passWord CHAR,serverName CHAR,serverIP CHAR,serverId CHAR,token CHAR,name CHAR,avatar CHAR)";
  770. NSString *sql = [NSString stringWithFormat:@"%@ %@",sql1,tablejg];
  771. //NSLog(@"sql:%@",sql);
  772. BOOL success = [self.db executeUpdate:sql];
  773. if (!success) {
  774. NSLog(@"创建lcUserServer表失败: %@", [self.db lastErrorMessage]);
  775. } else {
  776. NSLog(@"创建lcUserServer表成功");
  777. }
  778. }
  779. //删除表
  780. -(void)deleatlcUserServer{
  781. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  782. NSString *sql=@"DROP TABLE lcUserServer";
  783. BOOL success = [self.db executeUpdate:sql];
  784. if (!success) {
  785. NSLog(@"删除lcChatlasttime_表失败: %@", [self.db lastErrorMessage]);
  786. } else {
  787. NSLog(@"删除lcChatlasttime_表成功");
  788. }
  789. }
  790. //插入数据
  791. -(void)insertlcUserServer:(NSDictionary *_Nonnull)msg succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  792. NSString *vstr = @"INSERT OR REPLACE INTO lcUserServer";
  793. vstr=[NSString stringWithFormat:@"%@%@",vstr,@" ('userId','userName','passWord','serverName','serverIP','serverId','token','name','avatar') values ("];
  794. vstr=[NSString stringWithFormat:@"%@'%@',",vstr,msg[@"userId"]];
  795. vstr=[NSString stringWithFormat:@"%@'%@',",vstr,msg[@"userName"]];
  796. vstr=[NSString stringWithFormat:@"%@'%@',",vstr,msg[@"passWord"]];
  797. vstr=[NSString stringWithFormat:@"%@'%@',",vstr,msg[@"serverName"]];
  798. vstr=[NSString stringWithFormat:@"%@'%@',",vstr,msg[@"serverIP"]];
  799. vstr=[NSString stringWithFormat:@"%@'%@',",vstr,msg[@"serverId"]];
  800. vstr=[NSString stringWithFormat:@"%@'%@',",vstr,msg[@"token"]];
  801. vstr=[NSString stringWithFormat:@"%@'%@',",vstr,msg[@"name"]?:@""];
  802. vstr=[NSString stringWithFormat:@"%@'%@')",vstr,msg[@"avatar"]?:@""];
  803. NSLog(@"vstr:%@",vstr);
  804. BOOL success = [self.db executeUpdate:vstr];
  805. if (!success) {
  806. if(fail){
  807. fail([NSString stringWithFormat:@"插入lcUserServer表失败: %@", [self.db lastErrorMessage]]);
  808. }
  809. NSLog(@"插入消息表失败: %@", [self.db lastErrorMessage]);
  810. } else {
  811. NSLog(@"插入lcUserServer表成功 lcUserServer");
  812. if (succ) {
  813. succ(nil);
  814. }
  815. }
  816. }
  817. -(void)selectlcUserServer:(NSString *_Nonnull)userId succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  818. // 查询数据
  819. NSString *vstr = @"select * from lcUserServer";
  820. vstr=[NSString stringWithFormat:@"%@ %@%@",vstr,@"where userId=",userId];
  821. NSLog(@"vstr:%@",vstr);
  822. FMResultSet *rs = [self.db executeQuery:vstr];
  823. NSMutableArray *array=[[NSMutableArray alloc] init];
  824. //('userId','userName','passWord','serverName','serverIP','serverId','token')
  825. while ([rs next]) {
  826. NSDictionary *chatD=@{
  827. @"id":[rs stringForColumn:@"id"],
  828. @"userId":[rs stringForColumn:@"userId"],
  829. @"userName":[rs stringForColumn:@"userName"],
  830. @"passWord":[rs stringForColumn:@"passWord"],
  831. @"serverName":[rs stringForColumn:@"serverName"],
  832. @"serverIP":[rs stringForColumn:@"serverIP"],
  833. @"serverId":[rs stringForColumn:@"serverId"],
  834. @"name":[rs stringForColumn:@"name"],
  835. @"avatar":[rs stringForColumn:@"avatar"],
  836. @"token":[rs stringForColumn:@"token"],
  837. };
  838. [array addObject:chatD];
  839. }
  840. [rs close]; // 关闭结果集
  841. if(succ){
  842. succ(array);
  843. }
  844. }
  845. -(void)selectAlllcUserServer:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  846. // 查询数据
  847. NSString *vstr = @"select * from lcUserServer";
  848. NSLog(@"vstr:%@",vstr);
  849. FMResultSet *rs = [self.db executeQuery:vstr];
  850. NSMutableArray *array=[[NSMutableArray alloc] init];
  851. while ([rs next]) {
  852. NSDictionary *chatD=@{
  853. @"id":[rs stringForColumn:@"id"],
  854. @"userId":[rs stringForColumn:@"userId"],
  855. @"userName":[rs stringForColumn:@"userName"],
  856. @"passWord":[rs stringForColumn:@"passWord"],
  857. @"serverName":[rs stringForColumn:@"serverName"],
  858. @"serverIP":[rs stringForColumn:@"serverIP"],
  859. @"serverId":[rs stringForColumn:@"serverId"],
  860. @"name":[rs stringForColumn:@"name"],
  861. @"avatar":[rs stringForColumn:@"avatar"],
  862. @"token":[rs stringForColumn:@"token"],
  863. };
  864. [array addObject:chatD];
  865. }
  866. [rs close]; // 关闭结果集
  867. if(succ){
  868. succ(array);
  869. }
  870. }
  871. //删除数据
  872. -(void)deleteUserServer:(NSString *_Nonnull)sid succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  873. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  874. NSString *vstr = @"DELETE FROM lcUserServer WHERE id=";
  875. vstr=[NSString stringWithFormat:@"%@%@",vstr,sid];
  876. BOOL success = [self.db executeUpdate:vstr];
  877. if (!success) {
  878. NSLog(@"删除消息表失败: %@", [self.db lastErrorMessage]);
  879. if(fail){
  880. fail([NSString stringWithFormat:@"删除消息表失败: %@", [self.db lastErrorMessage]]);
  881. }
  882. } else {
  883. int changes = [self.db changes];
  884. if (changes > 0) {
  885. NSLog(@"成功删除 %d 条记录", changes);
  886. if (succ) {
  887. succ(nil);
  888. }
  889. } else {
  890. NSLog(@"没有匹配的记录被删除");
  891. }
  892. }
  893. }
  894. -(void)updataUserServer:(NSDictionary *_Nonnull)msg succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  895. BOOL ACTresult =true;
  896. // 开启事务
  897. [self.db beginTransaction];
  898. @try {
  899. NSDictionary *safeDict = [self replaceNullsWithEmptyStringInDictionary:msg];
  900. NSString *deleteSQL = [NSString stringWithFormat:
  901. @"DELETE FROM %@ WHERE userName = ? AND serverIP=?",
  902. @"lcUserServer"];
  903. if (![self.db executeUpdate:deleteSQL, safeDict[@"userName"],safeDict[@"serverIP"]]) {
  904. NSLog(@"lcUserServer 删除旧数据失败(userName=%@): %@", safeDict[@"userName"], [self.db lastErrorMessage]);
  905. // 不终止,继续尝试插入
  906. }
  907. else{
  908. NSLog(@"lcUserServer 删除旧数据(userName=%@): %@", safeDict[@"userName"], [self.db lastErrorMessage]);
  909. }
  910. // 准备SQL语句(使用参数化查询,避免SQL注入)
  911. NSString *insertSQL = [NSString stringWithFormat:
  912. @"INSERT INTO %@ ('userId','userName','passWord','serverName','serverIP','serverId','token','name','avatar') VALUES (?,?,?,?,?,?,?,?,?)",
  913. @"lcUserServer"];
  914. // 执行插入(使用参数化查询)
  915. BOOL success = [self.db executeUpdate:insertSQL,
  916. safeDict[@"userId"],
  917. safeDict[@"userName"],
  918. safeDict[@"passWord"],
  919. safeDict[@"serverName"],
  920. safeDict[@"serverIP"],
  921. safeDict[@"serverId"],
  922. safeDict[@"token"],
  923. safeDict[@"name"],
  924. safeDict[@"avatar"]];
  925. if (!success) {
  926. // 记录失败的消息
  927. ACTresult = false;
  928. }
  929. // 提交事务
  930. [self.db commit];
  931. if (succ) {
  932. // 如果有失败记录,返回失败信息
  933. if(ACTresult){
  934. succ(nil);
  935. }
  936. else{
  937. if (fail) {
  938. fail([NSString stringWithFormat:@"插入lcUserServer表失败: %@", [self.db lastErrorMessage]]);
  939. }
  940. }
  941. }
  942. }
  943. @catch (NSException *exception) {
  944. [self.db rollback];
  945. NSString *error = [NSString stringWithFormat:@"lcUserServer插入本地异常: %@", exception.reason];
  946. if (fail) {
  947. fail(error);
  948. }
  949. NSLog(@"%@", error);
  950. }
  951. }
  952. //安博通通话记录表
  953. -(void)createCallmsgTable{
  954. // 创建表语句
  955. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  956. NSString *sql1=@"create table if not exists Callmsglist_";
  957. NSString *tablejg = @"(id CHAR PRIMARY KEY,chatId CHAR,type CHAR,messageType CHAR,timestamp BIGINT,localtime BIGINT,Message TEXT)";
  958. NSString *sql = [NSString stringWithFormat:@"%@%@ %@",sql1,userid,tablejg];
  959. NSLog(@"createCallmsgTable --- sql:%@",sql);
  960. BOOL success = [self.db executeUpdate:sql];
  961. if (!success) {
  962. NSLog(@"创建消息表失败: %@", [self.db lastErrorMessage]);
  963. } else {
  964. NSLog(@"创建消息表成功");
  965. }
  966. }
  967. -(void)deleteCallmsgTable{
  968. NSString *sql1=@"DROP TABLE Callmsglist_";
  969. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  970. NSString *sql = [NSString stringWithFormat:@"%@%@",sql1,userid];
  971. BOOL success = [self.db executeUpdate:sql];
  972. if (!success) {
  973. NSLog(@"删除消息表失败: %@", [self.db lastErrorMessage]);
  974. } else {
  975. NSLog(@"删除消息表成功");
  976. }
  977. }
  978. -(void)insertCallmsg:(NSDictionary *_Nonnull)msg succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  979. if (![self.db isOpen]) {
  980. return;
  981. }
  982. // 1. 参数校验
  983. if (!msg || msg.count == 0) {
  984. if (fail) fail(@"消息内容不能为空");
  985. return;
  986. }
  987. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  988. if (userid.length == 0) {
  989. if (fail) fail(@"用户ID获取失败");
  990. return;
  991. }
  992. NSString *tableName = [NSString stringWithFormat:@"Callmsglist_%@", userid];
  993. NSDictionary *safeDict = [self replaceNullsWithEmptyStringInDictionary:msg];
  994. // 2. 处理localtime
  995. NSString *localtime = [NSString stringWithFormat:@"%@", safeDict[@"localtime"]];
  996. NSString *msgtype = safeDict[@"messageType"];
  997. BOOL urlMark = true;
  998. // 3. 开启事务
  999. [self.db beginTransaction];
  1000. BOOL shouldRollback = NO;
  1001. @try {
  1002. // NSLog(@"删除旧数据(localtime=%@)", localtime);
  1003. NSString *selctSQL = [NSString stringWithFormat:@"SELECT * FROM %@ WHERE localtime = %@ AND (messageType='11' OR messageType='12')",tableName,localtime];
  1004. FMResultSet *rs = [self.db executeQuery:selctSQL];
  1005. BOOL markesel=NO;
  1006. while ([rs next]) {
  1007. //NSLog(@"rs:%@",rs);
  1008. NSString *msg =[rs stringForColumn:@"Message"];
  1009. NSLog(@"--------rsmsg:%@",msg);
  1010. markesel=YES;
  1011. break;
  1012. }
  1013. [rs close]; // 关闭结果集
  1014. if(markesel){
  1015. [self.db commit];
  1016. return;
  1017. }
  1018. if(urlMark){//删除旧数据,以便更新信息
  1019. // NSLog(@"删除旧数据(2localtime=%@)", localtime);
  1020. // 4. 删除相同localtime的旧数据
  1021. NSString *deleteSQL = [NSString stringWithFormat:
  1022. @"DELETE FROM %@ WHERE localtime = ?",
  1023. tableName];
  1024. if (![self.db executeUpdate:deleteSQL, localtime]) {
  1025. // NSLog(@"删除旧数据失败(localtime=%@): %@", localtime, [self.db lastErrorMessage]);
  1026. // 不终止,继续尝试插入
  1027. }
  1028. }
  1029. // 5. 准备插入数据
  1030. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:safeDict options:0 error:nil];
  1031. NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  1032. NSString *insertSQL = [NSString stringWithFormat:
  1033. @"INSERT INTO %@ (id,chatId,type,messageType,timestamp,localtime,Message) VALUES (?,?,?,?,?,?,?)",
  1034. tableName];
  1035. // 6. 执行插入
  1036. BOOL success = [self.db executeUpdate:insertSQL,
  1037. safeDict[@"id"],
  1038. safeDict[@"chatId"],
  1039. safeDict[@"result"],
  1040. safeDict[@"messageType"],
  1041. safeDict[@"timestamp"],
  1042. localtime,
  1043. jsonString];
  1044. if (!success) {
  1045. shouldRollback = YES;
  1046. NSString *error = [NSString stringWithFormat:@"插入消息失败: %@", [self.db lastErrorMessage]];
  1047. if (fail) fail(error);
  1048. } else {
  1049. [self.db commit];
  1050. if (succ) succ(nil);
  1051. // NSLog(@"消息插入成功(ID=%@)", safeDict);
  1052. }
  1053. }
  1054. @catch (NSException *exception) {
  1055. shouldRollback = YES;
  1056. NSString *error = [NSString stringWithFormat:@"操作异常: %@", exception.reason];
  1057. if (fail) fail(error);
  1058. }
  1059. @finally {
  1060. if (shouldRollback) {
  1061. [self.db rollback];
  1062. }
  1063. }
  1064. }
  1065. -(void)selectCallmsgwithType:(NSString *_Nullable)type succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  1066. // 查询数据
  1067. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  1068. NSString *vstr = @"";
  1069. if(type.length==0){
  1070. NSString *sqlstr = @"SELECT cm.* FROM Callmsglist_%@ cm JOIN(SELECT chatId,MAX(timestamp) AS last_timestamp FROM Callmsglist_%@ GROUP BY chatId) cm2 ON cm.chatId=cm2.chatId AND cm.timestamp = cm2.last_timestamp";
  1071. vstr = [NSString stringWithFormat:sqlstr,userid,userid];
  1072. }
  1073. else{
  1074. NSString *sqlstr = @"SELECT cm.* FROM Callmsglist_%@ cm JOIN(SELECT chatId,MAX(timestamp) AS last_timestamp FROM Callmsglist_%@ where type = '0' GROUP BY chatId) cm2 ON cm.chatId=cm2.chatId AND cm.timestamp = cm2.last_timestamp";
  1075. vstr = [NSString stringWithFormat:sqlstr,userid,userid];
  1076. }
  1077. //NSLog(@"vstr:%@",vstr);
  1078. FMResultSet *rs = [self.db executeQuery:vstr];
  1079. NSMutableArray *array=[[NSMutableArray alloc] init];
  1080. while ([rs next]) {
  1081. NSLog(@"rs:%@",[rs stringForColumn:@"type"]);
  1082. NSString *msg =[rs stringForColumn:@"Message"];
  1083. //NSLog(@"msg:%@",msg);
  1084. NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
  1085. if (data) {
  1086. NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
  1087. [array addObject:jsonDict];
  1088. }
  1089. }
  1090. [rs close]; // 关闭结果集
  1091. if(succ){
  1092. succ(array);
  1093. }
  1094. }
  1095. -(void)selectUserCallmsg:(NSString *_Nullable)chatId succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  1096. // 查询数据
  1097. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  1098. NSString *vstr = @"select * from Callmsglist_";
  1099. vstr=[NSString stringWithFormat:@"%@%@",vstr,userid];
  1100. if(chatId.length>0){
  1101. vstr=[NSString stringWithFormat:@"%@ where chatId = %@",vstr,chatId];
  1102. }
  1103. vstr=[NSString stringWithFormat:@"%@ %@",vstr,@"ORDER BY timestamp ASC LIMIT 16;"];
  1104. //NSLog(@"vstr:%@",vstr);
  1105. FMResultSet *rs = [self.db executeQuery:vstr];
  1106. NSMutableArray *array=[[NSMutableArray alloc] init];
  1107. while ([rs next]) {
  1108. //NSLog(@"rs:%@",rs);
  1109. NSString *msg =[rs stringForColumn:@"Message"];
  1110. //NSLog(@"msg:%@",msg);
  1111. NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
  1112. if (data) {
  1113. NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
  1114. [array addObject:jsonDict];
  1115. }
  1116. }
  1117. [rs close]; // 关闭结果集
  1118. if(succ){
  1119. succ(array);
  1120. }
  1121. }
  1122. -(void)selectNextUserCallmsg:(NSString *_Nullable)chatId timestp:(NSInteger)timestp succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  1123. // 查询数据
  1124. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  1125. NSString *vstr = @"select * from Callmsglist_";
  1126. vstr=[NSString stringWithFormat:@"%@%@",vstr,userid];
  1127. if(chatId.length>0){
  1128. vstr=[NSString stringWithFormat:@"%@ where chatId = %@",vstr,chatId];
  1129. vstr=[NSString stringWithFormat:@"%@ AND timestamp < %ld",vstr,(long)timestp];
  1130. }
  1131. else{
  1132. vstr=[NSString stringWithFormat:@"%@ where timestamp < %ld",vstr,(long)timestp];
  1133. }
  1134. vstr=[NSString stringWithFormat:@"%@ %@",vstr,@"ORDER BY timestamp DESC LIMIT 16;"];
  1135. NSLog(@"vstr:%@",vstr);
  1136. FMResultSet *rs = [self.db executeQuery:vstr];
  1137. NSMutableArray *array=[[NSMutableArray alloc] init];
  1138. while ([rs next]) {
  1139. //NSLog(@"rs:%@",rs);
  1140. NSString *msg =[rs stringForColumn:@"Message"];
  1141. //NSLog(@"msg:%@",msg);
  1142. NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
  1143. if (data) {
  1144. NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
  1145. [array addObject:jsonDict];
  1146. }
  1147. }
  1148. [rs close]; // 关闭结果集
  1149. if(succ){
  1150. succ(array);
  1151. }
  1152. }
  1153. -(void)deleteCallmsg:(NSString *_Nonnull)sid succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  1154. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  1155. NSString *vstr = @"DELETE FROM Callmsglist_";
  1156. vstr=[NSString stringWithFormat:@"%@%@%@",vstr,userid,@" WHERE id=="];
  1157. vstr=[NSString stringWithFormat:@"%@%@",vstr,sid];
  1158. BOOL success = [self.db executeUpdate:vstr];
  1159. if (!success) {
  1160. NSLog(@"删除消息表失败: %@", [self.db lastErrorMessage]);
  1161. } else {
  1162. NSLog(@"删除消息表成功");
  1163. }
  1164. }
  1165. //------------------------------------
  1166. // 递归替换字典中的 NSNull 为 @""
  1167. - (NSDictionary *)replaceNullsWithEmptyStringInDictionary:(NSDictionary *)dictionary {
  1168. NSMutableDictionary *mutableDict = [NSMutableDictionary dictionaryWithDictionary:dictionary];
  1169. for (id key in [mutableDict allKeys]) {
  1170. id value = [mutableDict objectForKey:key];
  1171. if ([value isKindOfClass:[NSNull class]]) {
  1172. [mutableDict setObject:@"" forKey:key];
  1173. } else if ([value isKindOfClass:[NSDictionary class]]) {
  1174. // 递归处理子字典
  1175. [mutableDict setObject:[self replaceNullsWithEmptyStringInDictionary:value] forKey:key];
  1176. } else if ([value isKindOfClass:[NSArray class]]) {
  1177. // 递归处理数组
  1178. [mutableDict setObject:[self replaceNullsWithEmptyStringInArray:value] forKey:key];
  1179. }
  1180. }
  1181. return [NSDictionary dictionaryWithDictionary:mutableDict];
  1182. }
  1183. // 递归替换数组中的 NSNull 为 @""
  1184. - (NSArray *)replaceNullsWithEmptyStringInArray:(NSArray *)array {
  1185. NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:array];
  1186. for (NSInteger i = 0; i < [mutableArray count]; i++) {
  1187. id value = [mutableArray objectAtIndex:i];
  1188. if ([value isKindOfClass:[NSNull class]]) {
  1189. [mutableArray replaceObjectAtIndex:i withObject:@""];
  1190. } else if ([value isKindOfClass:[NSDictionary class]]) {
  1191. // 递归处理子字典
  1192. [mutableArray replaceObjectAtIndex:i withObject:[self replaceNullsWithEmptyStringInDictionary:value]];
  1193. } else if ([value isKindOfClass:[NSArray class]]) {
  1194. // 递归处理子数组
  1195. [mutableArray replaceObjectAtIndex:i withObject:[self replaceNullsWithEmptyStringInArray:value]];
  1196. }
  1197. }
  1198. return [NSArray arrayWithArray:mutableArray];
  1199. }
  1200. //avatar = "https://aiim.my-im.com/api/profile/upload/avatar.png";
  1201. //deptId = 103;
  1202. //domainId = "<null>";
  1203. //email = "<null>";
  1204. //id = 10000270;
  1205. //mobile = 880002;
  1206. //name = abt08;
  1207. //platformType = "<null>";
  1208. //registrationId = "<null>";
  1209. //sex = "<null>";
  1210. //tgbotAdmin = "<null>";
  1211. //tgbotName = "<null>";
  1212. //tgbotTk = "<null>";
  1213. //username = "<null>";
  1214. //uuid = "<null>";
  1215. //voipTk = "<null>";
  1216. //通讯录
  1217. -(void)createfirendsTable{
  1218. // 创建表语句
  1219. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  1220. NSString *sql1=@"create table if not exists Firendslist_";
  1221. NSString *tablejg = @"(id CHAR PRIMARY KEY,deptId CHAR,mobile CHAR,name CHAR,avatar CHAR,username CHAR)";
  1222. NSString *sql = [NSString stringWithFormat:@"%@%@ %@",sql1,userid,tablejg];
  1223. NSLog(@"createFirendslist_ --- sql:%@",sql);
  1224. BOOL success = [self.db executeUpdate:sql];
  1225. if (!success) {
  1226. NSLog(@"创建消息表失败: %@", [self.db lastErrorMessage]);
  1227. } else {
  1228. NSLog(@"创建消息表成功");
  1229. }
  1230. }
  1231. -(void)insertFirend:(NSDictionary *_Nonnull)firend succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  1232. if (![self.db isOpen]) {
  1233. return;
  1234. }
  1235. // 1. 参数校验
  1236. if (!firend) {
  1237. if (fail) fail(@"消息内容不能为空");
  1238. return;
  1239. }
  1240. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  1241. if (userid.length == 0) {
  1242. if (fail) fail(@"用户ID获取失败");
  1243. return;
  1244. }
  1245. NSString *tableName = [NSString stringWithFormat:@"Firendslist_%@", userid];
  1246. NSDictionary *safeDict = [self replaceNullsWithEmptyStringInDictionary:firend];
  1247. // 2. 处理firendId
  1248. NSString *firendId = [NSString stringWithFormat:@"%@", safeDict[@"id"]];
  1249. // 3. 开启事务
  1250. [self.db beginTransaction];
  1251. BOOL shouldRollback = NO;
  1252. @try {
  1253. NSString *deleteSQL = [NSString stringWithFormat:
  1254. @"DELETE FROM %@ WHERE id = ?",
  1255. tableName];
  1256. if (![self.db executeUpdate:deleteSQL, firendId]) {
  1257. // NSLog(@"删除旧数据失败(localtime=%@): %@", localtime, [self.db lastErrorMessage]);
  1258. // 不终止,继续尝试插入
  1259. }
  1260. // 5. 准备插入数据
  1261. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:safeDict options:0 error:nil];
  1262. NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  1263. NSString *insertSQL = [NSString stringWithFormat:
  1264. @"INSERT INTO %@ (id,deptId,mobile,name,avatar,username) VALUES (?,?,?,?,?,?)",
  1265. tableName];
  1266. // 6. 执行插入
  1267. BOOL success = [self.db executeUpdate:insertSQL,
  1268. safeDict[@"id"],
  1269. safeDict[@"deptId"],
  1270. safeDict[@"mobile"],
  1271. safeDict[@"name"],
  1272. safeDict[@"avatar"],
  1273. safeDict[@"username"]];
  1274. if (!success) {
  1275. shouldRollback = YES;
  1276. NSString *error = [NSString stringWithFormat:@"插入消息失败: %@", [self.db lastErrorMessage]];
  1277. if (fail) fail(error);
  1278. } else {
  1279. [self.db commit];
  1280. if (succ) succ(nil);
  1281. // NSLog(@"消息插入成功(ID=%@)", safeDict);
  1282. }
  1283. }
  1284. @catch (NSException *exception) {
  1285. shouldRollback = YES;
  1286. NSString *error = [NSString stringWithFormat:@"操作异常: %@", exception.reason];
  1287. if (fail) fail(error);
  1288. }
  1289. @finally {
  1290. if (shouldRollback) {
  1291. [self.db rollback];
  1292. }
  1293. }
  1294. }
  1295. -(void)deleteFirend:(NSString *_Nonnull)fId succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  1296. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  1297. NSString *vstr = @"DELETE FROM Firendslist_";
  1298. vstr=[NSString stringWithFormat:@"%@%@%@",vstr,userid,@" WHERE id="];
  1299. vstr=[NSString stringWithFormat:@"%@%@",vstr,fId];
  1300. BOOL success = [self.db executeUpdate:vstr];
  1301. if (!success) {
  1302. NSLog(@"删除消息表失败: %@", [self.db lastErrorMessage]);
  1303. } else {
  1304. NSLog(@"删除消息表成功");
  1305. }
  1306. }
  1307. //根据类型查询全部用户
  1308. -(void)selectFirendwithKW:(NSString *_Nullable)keyword succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  1309. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  1310. NSString *vstr = @"select * from Firendslist_";
  1311. vstr=[NSString stringWithFormat:@"%@%@",vstr,userid];
  1312. if(keyword.length>0){
  1313. vstr=[NSString stringWithFormat:@"%@ where name LIKE %@%@%@",vstr,@"'%",keyword,@"%'"];
  1314. }
  1315. vstr=[NSString stringWithFormat:@"%@ %@",vstr,@"ORDER BY name ASC LIMIT 16;"];
  1316. //NSLog(@"vstr:%@",vstr);
  1317. FMResultSet *rs = [self.db executeQuery:vstr];
  1318. NSMutableArray *array=[[NSMutableArray alloc] init];
  1319. while ([rs next]) {
  1320. //NSLog(@"rs:%@",rs);
  1321. NSDictionary *chatD=@{
  1322. @"id":[rs stringForColumn:@"id"]?:@"",
  1323. @"deptId":[rs stringForColumn:@"deptId"]?:@"",
  1324. @"mobile":[rs stringForColumn:@"mobile"]?:@"",
  1325. @"name":[rs stringForColumn:@"name"]?:@"",
  1326. @"avatar":[rs stringForColumn:@"avatar"]?:@"",
  1327. @"username":[rs stringForColumn:@"username"]?:@"",
  1328. };
  1329. [array addObject:chatD];
  1330. }
  1331. [rs close]; // 关闭结果集
  1332. if(succ){
  1333. succ(array);
  1334. }
  1335. }
  1336. //根据类型查询全部用户
  1337. -(void)selectFirendwithID:(NSString *_Nullable)firendId succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
  1338. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  1339. NSString *vstr = @"select * from Firendslist_";
  1340. vstr=[NSString stringWithFormat:@"%@%@",vstr,userid];
  1341. if(firendId.length>0){
  1342. vstr=[NSString stringWithFormat:@"%@ where id=%@",vstr,firendId];
  1343. }
  1344. vstr=[NSString stringWithFormat:@"%@ %@",vstr,@"ORDER BY name ASC LIMIT 16;"];
  1345. //NSLog(@"vstr:%@",vstr);
  1346. FMResultSet *rs = [self.db executeQuery:vstr];
  1347. NSMutableArray *array=[[NSMutableArray alloc] init];
  1348. while ([rs next]) {
  1349. //NSLog(@"rs:%@",rs);
  1350. NSDictionary *chatD=@{
  1351. @"id":[rs stringForColumn:@"id"]?:@"",
  1352. @"deptId":[rs stringForColumn:@"deptId"]?:@"",
  1353. @"mobile":[rs stringForColumn:@"mobile"]?:@"",
  1354. @"name":[rs stringForColumn:@"name"]?:@"",
  1355. @"avatar":[rs stringForColumn:@"avatar"]?:@"",
  1356. @"username":[rs stringForColumn:@"username"]?:@"",
  1357. };
  1358. [array addObject:chatD];
  1359. }
  1360. [rs close]; // 关闭结果集
  1361. if(succ){
  1362. succ(array);
  1363. }
  1364. }
  1365. -(void)deleatFirendtable{
  1366. NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
  1367. NSString *sql1=@"DROP TABLE Firendslist_";
  1368. NSString *sql = [NSString stringWithFormat:@"%@%@",sql1,userid];
  1369. BOOL success = [self.db executeUpdate:sql];
  1370. if (!success) {
  1371. NSLog(@"删除lcChatlasttime_表失败: %@", [self.db lastErrorMessage]);
  1372. } else {
  1373. NSLog(@"删除lcChatlasttime_表成功");
  1374. }
  1375. }
  1376. @end