my_msg_db.dart 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import 'dart:convert';
  2. import 'package:bbyyy/beans/msg_bean_data_entity.dart';
  3. import 'package:bbyyy/beans/message_bean_entity.dart';
  4. import 'package:bbyyy/msgDB/sql_manager.dart';
  5. import 'package:bbyyy/my_tools/event_bus.dart';
  6. import 'package:bbyyy/my_tools/my_cookie.dart';
  7. import 'package:sqflite/sqflite.dart';
  8. class MsgDB extends BaseDbProvider {
  9. String name;
  10. final String uuid = 'uuid';
  11. final String sentAt = 'sent_at';
  12. final String receiverUid = 'receiver_uid';
  13. final String receiverName = 'receiver_name';
  14. final String receiverPic = 'receiver_pic';
  15. final String senderUid = 'sender_uid';
  16. final String senderName = 'sender_name';
  17. final String senderPic = 'sender_pic';
  18. final String type = 'type';
  19. final String content = 'content';
  20. MsgDB(this.name);
  21. @override
  22. createTableString() {
  23. return '''CREATE TABLE $name
  24. ($uuid TEXT,
  25. $sentAt TEXT,
  26. $receiverUid INT,
  27. $receiverName TEXT,
  28. $receiverPic TEXT,
  29. $senderUid INT,
  30. $senderName TEXT,
  31. $senderPic TEXT,
  32. $type TEXT,
  33. $content TEXT)''';
  34. }
  35. @override
  36. tableName() {
  37. return name;
  38. }
  39. //添加表数据
  40. addTableData(List<MessageBeanContent> data) async {
  41. Database db = await getDataBase();
  42. Batch batch = db.batch();
  43. String roomName = this.name.replaceAll('table', '').replaceAll('_', '-');
  44. String lastTime = MyCookie().prefs.getString('最后阅读时间$roomName');
  45. data.forEach((element) {
  46. DateTime d1 = DateTime.parse(element.sentAt);
  47. DateTime d2;
  48. try{ d2 = DateTime.parse(lastTime);}catch(e){}
  49. if(d2==null){
  50. int noRead = MyCookie().prefs.getInt(
  51. '未读消息$roomName');
  52. if(noRead==null){
  53. noRead = 0;
  54. }
  55. noRead++;
  56. MyCookie().prefs.setInt(
  57. '未读消息$roomName',
  58. noRead);
  59. }else{
  60. if(d1.isAfter(d2)){
  61. int noRead = MyCookie().prefs.getInt(
  62. '未读消息$roomName');
  63. noRead++;
  64. MyCookie().prefs.setInt(
  65. '未读消息$roomName',
  66. noRead);
  67. }else{
  68. }
  69. }
  70. batch.insert(name, element.toJson());
  71. });
  72. print(await batch.commit());
  73. }
  74. //删除表数据
  75. deleteTableData() async {
  76. Database db = await getDataBase();
  77. int count = await db.rawDelete('DELETE FROM $name');
  78. EventBus().emit('delDBChatMsg$name');
  79. return count == 1;
  80. }
  81. //撤回消息删除数据
  82. withdrawMessage(String uuID) async {
  83. Database db = await getDataBase();
  84. int count = await db.rawDelete('DELETE FROM $name WHERE $uuid = \'$uuID\'');
  85. EventBus().emit('withdrawMessage');
  86. return count == 1;
  87. }
  88. //更新表数据
  89. updateTableData(String c, String ID) async {
  90. Database db = await getDataBase();
  91. int count = await db
  92. .rawUpdate('UPDATE $name SET $content = \'$c\' WHERE $uuid = \'$ID\'');
  93. EventBus().emit('updateTableData');
  94. return count == 1;
  95. }
  96. //查询表数据
  97. queryTableData(int page, int count) async {
  98. Database db = await getDataBase();
  99. List<Map<String, dynamic>> maps = await db.rawQuery(
  100. "select distinct ${this.uuid},"
  101. "${this.sentAt},"
  102. "${this.receiverUid},"
  103. "${this.receiverName},"
  104. "${this.receiverPic},"
  105. "${this.senderUid},"
  106. "${this.senderName},"
  107. "${this.senderPic},"
  108. "${this.type},"
  109. "${this.content}"
  110. " from $name ORDER BY ${this.sentAt} DESC LIMIT ${count * (page - 1)},$count");
  111. return maps;
  112. }
  113. //删除保存记录前的聊天数据
  114. delPassMsg() {}
  115. }