FriendDao.java 39 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051
  1. package com.sk.weichat.db.dao;
  2. import android.content.Context;
  3. import android.os.Handler;
  4. import android.text.TextUtils;
  5. import android.util.Log;
  6. import com.j256.ormlite.android.apptools.OpenHelperManager;
  7. import com.j256.ormlite.dao.Dao;
  8. import com.j256.ormlite.dao.Dao.CreateOrUpdateStatus;
  9. import com.j256.ormlite.dao.DaoManager;
  10. import com.j256.ormlite.dao.GenericRawResults;
  11. import com.j256.ormlite.stmt.DeleteBuilder;
  12. import com.j256.ormlite.stmt.PreparedQuery;
  13. import com.j256.ormlite.stmt.QueryBuilder;
  14. import com.j256.ormlite.stmt.UpdateBuilder;
  15. import com.sk.weichat.MyApplication;
  16. import com.sk.weichat.R;
  17. import com.sk.weichat.bean.AttentionUser;
  18. import com.sk.weichat.bean.Friend;
  19. import com.sk.weichat.bean.message.ChatMessage;
  20. import com.sk.weichat.bean.message.MucRoom;
  21. import com.sk.weichat.bean.message.MucRoomMember;
  22. import com.sk.weichat.bean.message.NewFriendMessage;
  23. import com.sk.weichat.bean.message.XmppMessage;
  24. import com.sk.weichat.db.SQLiteHelper;
  25. import com.sk.weichat.db.SQLiteRawUtil;
  26. import com.sk.weichat.sp.TableVersionSp;
  27. import com.sk.weichat.ui.erp.util.ViewUtil;
  28. import com.sk.weichat.util.TimeUtils;
  29. import com.sk.weichat.xmpp.listener.ChatMessageListener;
  30. import java.sql.SQLException;
  31. import java.util.List;
  32. import java.util.UUID;
  33. /**
  34. * 访问朋友数据的Dao
  35. *
  36. *
  37. */
  38. public class FriendDao {
  39. private static FriendDao instance = null;
  40. public static final FriendDao getInstance() {
  41. if (instance == null) {
  42. synchronized (FriendDao.class) {
  43. if (instance == null) {
  44. instance = new FriendDao();
  45. }
  46. }
  47. }
  48. return instance;
  49. }
  50. public Dao<Friend, Integer> friendDao;
  51. private SQLiteHelper mHelper;
  52. private FriendDao() {
  53. try {
  54. mHelper = OpenHelperManager.getHelper(MyApplication.getInstance(), SQLiteHelper.class);
  55. friendDao = DaoManager.createDao(mHelper.getConnectionSource(), Friend.class);
  56. } catch (SQLException e) {
  57. e.printStackTrace();
  58. }
  59. }
  60. @Override
  61. protected void finalize() throws Throwable {
  62. super.finalize();
  63. OpenHelperManager.releaseHelper();
  64. }
  65. /**
  66. * 检测4个系统号是否存在
  67. *
  68. * @param ownerId
  69. */
  70. public void checkSystemFriend(String ownerId) {
  71. try {
  72. List<Friend> friendsList = friendDao.queryForEq("ownerId", ownerId);
  73. if (friendsList != null && friendsList.size() > 0) {// 说明不是第一次创建,直接返回
  74. // Friend friend = new Friend();
  75. // friend.setOwnerId(ownerId);
  76. // // 新朋友消息10001号
  77. // friend.setUserId(Friend.ID_NEW_FRIEND_MESSAGE);
  78. // friend.setNickName(Friend.NICKNAME_NEW_FRIEND_MESSAGE);
  79. // friend.setStatus(Friend.STATUS_SYSTEM);
  80. // friendsList = friendDao.queryForMatching(friend);
  81. // if (friendsList == null || friendsList.size() <= 0) {// 添加这个新朋友消息10001号
  82. // Log.i("FriendDao","创建系统菜单........");
  83. // }else{
  84. Log.i("FriendDao","发现已有系统菜单,直接返回!");
  85. return;
  86. // }
  87. }
  88. Friend friend = new Friend();
  89. friend.setOwnerId(ownerId);
  90. // 新朋友消息10001号
  91. friend.setUserId(Friend.ID_NEW_FRIEND_MESSAGE);
  92. friend.setNickName(Friend.NICKNAME_NEW_FRIEND_MESSAGE);
  93. friend.setStatus(Friend.STATUS_SYSTEM);
  94. friendsList = friendDao.queryForMatching(friend);
  95. if (friendsList == null || friendsList.size() <= 0) {// 添加这个新朋友消息10001号
  96. Log.i("FriendDao","创建系统菜单........");
  97. friendDao.create(friend);
  98. // 添加一条新朋友提示,更新到好友表中
  99. ChatMessage chatMessage = new ChatMessage();
  100. chatMessage.setType(XmppMessage.TYPE_TIP);
  101. chatMessage.setPacketId(UUID.randomUUID().toString().replaceAll("-", ""));// 随机产生一个PacketId
  102. chatMessage.setFromUserId(Friend.ID_NEW_FRIEND_MESSAGE);
  103. chatMessage.setMessageState(ChatMessageListener.MESSAGE_SEND_SUCCESS);
  104. chatMessage.setTimeSend(TimeUtils.sk_time_current_time());
  105. chatMessage.setContent("");
  106. chatMessage.setMySend(false);// 表示不是自己发的
  107. // 更新消息记录
  108. updateLastChatMessage(ownerId, Friend.ID_NEW_FRIEND_MESSAGE, chatMessage);
  109. }
  110. // 系统消息10000号
  111. friend.setUserId(Friend.ID_SYSTEM_MESSAGE);
  112. friend.setNickName(Friend.NICKNAME_SYSTEM_MESSAGE);
  113. friend.setStatus(Friend.STATUS_SYSTEM);
  114. friendsList = friendDao.queryForMatching(friend);
  115. if (friendsList == null || friendsList.size() <= 0) {// 添加这个系统消息10000号
  116. friendDao.create(friend);
  117. // 添加一条系统提示
  118. ChatMessage chatMessage = new ChatMessage();
  119. chatMessage.setType(XmppMessage.TYPE_TIP);
  120. chatMessage.setPacketId(UUID.randomUUID().toString().replaceAll("-", ""));// 随机产生一个PacketId
  121. chatMessage.setFromUserId(Friend.ID_SYSTEM_MESSAGE);
  122. chatMessage.setMessageState(ChatMessageListener.MESSAGE_SEND_SUCCESS);
  123. // 为了使得初始生成的系统消息排在新朋友前面,所以在时间节点上延迟一点 1s
  124. chatMessage.setTimeSend(TimeUtils.sk_time_current_time() + 1);
  125. chatMessage.setContent(MyApplication.getInstance().getString(R.string.welcome_user_software));
  126. chatMessage.setMySend(false);// 表示不是自己发的
  127. // 往消息表里插入一条记录
  128. ChatMessageDao.getInstance().saveNewSingleChatMessage(ownerId, Friend.ID_SYSTEM_MESSAGE, chatMessage);
  129. // 往朋友表里面插入一条未读记录
  130. markUserMessageUnRead(ownerId, Friend.ID_SYSTEM_MESSAGE);
  131. // 更新消息记录
  132. updateLastChatMessage(ownerId, Friend.ID_SYSTEM_MESSAGE, chatMessage);
  133. }
  134. // 商务圈消息10002
  135. // friend.setUserId(Friend.ID_BLOG_MESSAGE);
  136. // friend.setNickName(Friend.NICKNAME_BLOG_MESSAGE);
  137. // friend.setStatus(Friend.STATUS_NO_SHOW_SYSTEM);// 不显示
  138. // friendsList = friendDao.queryForMatching(friend);
  139. // if (friendsList == null || friendsList.size() <= 0) {// 添加这个商务圈消息10002
  140. // friendDao.create(friend);
  141. // }
  142. // 面试中心10003
  143. // friend.setUserId(Friend.ID_INTERVIEW_MESSAGE);
  144. // friend.setNickName(Friend.NICKNAME_INTERVIEW_MESSAGE);
  145. // friend.setStatus(Friend.STATUS_NO_SHOW_SYSTEM);// 不显示
  146. // friendsList = friendDao.queryForMatching(friend);
  147. // if (friendsList == null || friendsList.size() <= 0) {// 添加这个面试中心10003
  148. // friendDao.create(friend);
  149. // }
  150. friend.setUserId(Friend.ID_ERP_PROCESS);
  151. friend.setNickName(Friend.NICKNAME_ERP_PROCESS);
  152. friend.setStatus(Friend.STATUS_SYSTEM);// 不显示
  153. friendsList = friendDao.queryForMatching(friend);
  154. if (friendsList == null || friendsList.size() <= 0) {// 添加这个面试中心10003
  155. friendDao.create(friend);
  156. // 添加一条系统提示
  157. ChatMessage chatMessage = new ChatMessage();
  158. chatMessage.setType(XmppMessage.TYPE_TIP);
  159. chatMessage.setPacketId(UUID.randomUUID().toString().replaceAll("-", ""));// 随机产生一个PacketId
  160. chatMessage.setFromUserId(Friend.ID_ERP_PROCESS);
  161. chatMessage.setMessageState(ChatMessageListener.MESSAGE_SEND_SUCCESS);
  162. // 为了使得初始生成的系统消息排在新朋友前面,所以在时间节点上延迟一点 1s
  163. chatMessage.setTimeSend(TimeUtils.sk_time_current_time() + 7);
  164. chatMessage.setContent(MyApplication.getInstance().getString(R.string.welcome_user_software));
  165. chatMessage.setMySend(false);// 表示不是自己发的
  166. // 往消息表里插入一条记录
  167. ChatMessageDao.getInstance().saveNewSingleChatMessage(ownerId, Friend.ID_ERP_PROCESS, chatMessage);
  168. // 往朋友表里面插入一条未读记录
  169. markUserMessageUnRead(ownerId, Friend.ID_ERP_PROCESS);
  170. // 更新消息记录
  171. updateLastChatMessage(ownerId, Friend.ID_ERP_PROCESS, chatMessage);
  172. }
  173. friend.setUserId(Friend.ID_ERP_TASK);
  174. friend.setNickName(Friend.NICKNAME_ERP_TASK);
  175. friend.setStatus(Friend.STATUS_SYSTEM);// 不显示
  176. friendsList = friendDao.queryForMatching(friend);
  177. if (friendsList == null || friendsList.size() <= 0) {// 添加这个面试中心10003
  178. friendDao.create(friend);
  179. ChatMessage chatMessage = new ChatMessage();
  180. chatMessage.setType(XmppMessage.TYPE_TIP);
  181. chatMessage.setPacketId(UUID.randomUUID().toString().replaceAll("-", ""));// 随机产生一个PacketId
  182. chatMessage.setFromUserId(Friend.ID_ERP_TASK);
  183. chatMessage.setMessageState(ChatMessageListener.MESSAGE_SEND_SUCCESS);
  184. // 为了使得初始生成的系统消息排在新朋友前面,所以在时间节点上延迟一点 1s
  185. chatMessage.setTimeSend(TimeUtils.sk_time_current_time() + 6);
  186. chatMessage.setContent(MyApplication.getInstance().getString(R.string.welcome_user_software));
  187. chatMessage.setMySend(false);// 表示不是自己发的
  188. // 往消息表里插入一条记录
  189. ChatMessageDao.getInstance().saveNewSingleChatMessage(ownerId, Friend.ID_ERP_TASK, chatMessage);
  190. // 往朋友表里面插入一条未读记录
  191. markUserMessageUnRead(ownerId, Friend.ID_ERP_TASK);
  192. // 更新消息记录
  193. updateLastChatMessage(ownerId, Friend.ID_ERP_TASK, chatMessage);
  194. }
  195. friend.setUserId(Friend.ID_ERP_ZHIHUI);
  196. friend.setNickName(Friend.NICKNAME_ERP_ZHIHUI);
  197. friend.setStatus(Friend.STATUS_SYSTEM);// 不显示
  198. friendsList = friendDao.queryForMatching(friend);
  199. if (friendsList == null || friendsList.size() <= 0) {// 添加这个面试中心10003
  200. friendDao.create(friend);
  201. ChatMessage chatMessage = new ChatMessage();
  202. chatMessage.setType(XmppMessage.TYPE_TIP);
  203. chatMessage.setPacketId(UUID.randomUUID().toString().replaceAll("-", ""));// 随机产生一个PacketId
  204. chatMessage.setFromUserId(Friend.ID_ERP_ZHIHUI);
  205. chatMessage.setMessageState(ChatMessageListener.MESSAGE_SEND_SUCCESS);
  206. // 为了使得初始生成的系统消息排在新朋友前面,所以在时间节点上延迟一点 1s
  207. chatMessage.setTimeSend(TimeUtils.sk_time_current_time() + 5);
  208. chatMessage.setContent(MyApplication.getInstance().getString(R.string.welcome_user_software));
  209. chatMessage.setMySend(false);// 表示不是自己发的
  210. // 往消息表里插入一条记录
  211. ChatMessageDao.getInstance().saveNewSingleChatMessage(ownerId, Friend.ID_ERP_ZHIHUI, chatMessage);
  212. // 往朋友表里面插入一条未读记录
  213. markUserMessageUnRead(ownerId, Friend.ID_ERP_ZHIHUI);
  214. // 更新消息记录
  215. updateLastChatMessage(ownerId, Friend.ID_ERP_ZHIHUI, chatMessage);
  216. }
  217. friend.setUserId(Friend.ID_ERP_NEWS);
  218. friend.setNickName(Friend.NICKNAME_ERP_NEWS);
  219. friend.setStatus(Friend.STATUS_SYSTEM);// 不显示
  220. friendsList = friendDao.queryForMatching(friend);
  221. if (friendsList == null || friendsList.size() <= 0) {// 添加这个面试中心10003
  222. friendDao.create(friend);
  223. ChatMessage chatMessage = new ChatMessage();
  224. chatMessage.setType(XmppMessage.TYPE_TIP);
  225. chatMessage.setPacketId(UUID.randomUUID().toString().replaceAll("-", ""));// 随机产生一个PacketId
  226. chatMessage.setFromUserId(Friend.ID_ERP_NEWS);
  227. chatMessage.setMessageState(ChatMessageListener.MESSAGE_SEND_SUCCESS);
  228. // 为了使得初始生成的系统消息排在新朋友前面,所以在时间节点上延迟一点 1s
  229. chatMessage.setTimeSend(TimeUtils.sk_time_current_time() + 2);
  230. chatMessage.setContent(MyApplication.getInstance().getString(R.string.welcome_user_software));
  231. chatMessage.setMySend(false);// 表示不是自己发的
  232. // 往消息表里插入一条记录
  233. ChatMessageDao.getInstance().saveNewSingleChatMessage(ownerId, Friend.ID_ERP_NEWS, chatMessage);
  234. // 往朋友表里面插入一条未读记录
  235. markUserMessageUnRead(ownerId, Friend.ID_ERP_NEWS);
  236. // 更新消息记录
  237. updateLastChatMessage(ownerId, Friend.ID_ERP_NEWS, chatMessage);
  238. }
  239. friend.setUserId(Friend.ID_ERP_NOTICE);
  240. friend.setNickName(Friend.NICKNAME_ERP_NOTICE);
  241. friend.setStatus(Friend.STATUS_SYSTEM);// 不显示
  242. friendsList = friendDao.queryForMatching(friend);
  243. if (friendsList == null || friendsList.size() <= 0) {// 添加这个面试中心10003
  244. friendDao.create(friend);
  245. ChatMessage chatMessage = new ChatMessage();
  246. chatMessage.setType(XmppMessage.TYPE_TIP);
  247. chatMessage.setPacketId(UUID.randomUUID().toString().replaceAll("-", ""));// 随机产生一个PacketId
  248. chatMessage.setFromUserId(Friend.ID_ERP_NOTICE);
  249. chatMessage.setMessageState(ChatMessageListener.MESSAGE_SEND_SUCCESS);
  250. // 为了使得初始生成的系统消息排在新朋友前面,所以在时间节点上延迟一点 1s
  251. chatMessage.setTimeSend(TimeUtils.sk_time_current_time() + 3);
  252. chatMessage.setContent(MyApplication.getInstance().getString(R.string.welcome_user_software));
  253. chatMessage.setMySend(false);// 表示不是自己发的
  254. // 往消息表里插入一条记录
  255. ChatMessageDao.getInstance().saveNewSingleChatMessage(ownerId, Friend.ID_ERP_NOTICE, chatMessage);
  256. // 往朋友表里面插入一条未读记录
  257. markUserMessageUnRead(ownerId, Friend.ID_ERP_NOTICE);
  258. // 更新消息记录
  259. updateLastChatMessage(ownerId, Friend.ID_ERP_NOTICE, chatMessage);
  260. }
  261. friend.setUserId(Friend.ID_ERP_GONGGAO);
  262. friend.setNickName(Friend.NICKNAME_ERP_GONGGAO);
  263. friend.setStatus(Friend.STATUS_SYSTEM);// 不显示
  264. friendsList = friendDao.queryForMatching(friend);
  265. if (friendsList == null || friendsList.size() <= 0) {// 添加这个面试中心10003
  266. friendDao.create(friend);
  267. ChatMessage chatMessage = new ChatMessage();
  268. chatMessage.setType(XmppMessage.TYPE_TIP);
  269. chatMessage.setPacketId(UUID.randomUUID().toString().replaceAll("-", ""));// 随机产生一个PacketId
  270. chatMessage.setFromUserId(Friend.ID_ERP_GONGGAO);
  271. chatMessage.setMessageState(ChatMessageListener.MESSAGE_SEND_SUCCESS);
  272. // 为了使得初始生成的系统消息排在新朋友前面,所以在时间节点上延迟一点 1s
  273. chatMessage.setTimeSend(TimeUtils.sk_time_current_time() + 4);
  274. chatMessage.setContent(MyApplication.getInstance().getString(R.string.welcome_user_software));
  275. chatMessage.setMySend(false);// 表示不是自己发的
  276. // 往消息表里插入一条记录
  277. ChatMessageDao.getInstance().saveNewSingleChatMessage(ownerId, Friend.ID_ERP_GONGGAO, chatMessage);
  278. // 往朋友表里面插入一条未读记录
  279. markUserMessageUnRead(ownerId, Friend.ID_ERP_GONGGAO);
  280. // 更新消息记录
  281. updateLastChatMessage(ownerId, Friend.ID_ERP_GONGGAO, chatMessage);
  282. }
  283. } catch (SQLException e) {
  284. e.printStackTrace();
  285. }
  286. }
  287. /**
  288. * 更新与某个好友的阅读状态为已读
  289. *
  290. * @param friendId
  291. * @param ownerId
  292. */
  293. public void markUserMessageRead(String ownerId, String friendId) {
  294. UpdateBuilder<Friend, Integer> builder = friendDao.updateBuilder();
  295. try {
  296. Log.d("roamer","........标为已读.......");
  297. builder.updateColumnValue("unReadNum", 0);
  298. builder.where().eq("ownerId", ownerId).and().eq("userId", friendId);
  299. friendDao.update(builder.prepare());
  300. } catch (SQLException e) {
  301. e.printStackTrace();
  302. }
  303. }
  304. /**
  305. * 更新某个好友的阅读状态,+1条未读信息
  306. *
  307. * @return
  308. */
  309. public void markUserMessageUnRead(String ownerId, String friendId) {
  310. try {
  311. PreparedQuery<Friend> preparedQuery = friendDao.queryBuilder().where().eq("ownerId", ownerId).and().eq("userId", friendId).prepare();
  312. List<Friend> friendsList = friendDao.query(preparedQuery);
  313. if (friendsList != null && friendsList.size() > 0) {
  314. Friend friend = friendsList.get(0);
  315. int unReadCount = friend.getUnReadNum();
  316. friend.setUnReadNum(++unReadCount);
  317. friendDao.update(friend);
  318. }
  319. } catch (SQLException e) {
  320. e.printStackTrace();
  321. }
  322. }
  323. /**
  324. * 更新某个好友的阅读状态,设置多少条消息(设置+未读)
  325. *
  326. * @return
  327. */
  328. public void markUserMessageUnRead(String ownerId, String friendId,int num) {
  329. try {
  330. PreparedQuery<Friend> preparedQuery = friendDao.queryBuilder().where().eq("ownerId", ownerId).and().eq("userId", friendId).prepare();
  331. List<Friend> friendsList = friendDao.query(preparedQuery);
  332. if (friendsList != null && friendsList.size() > 0) {
  333. Friend friend = friendsList.get(0);
  334. int unReadCount = friend.getUnReadNum();
  335. friend.setUnReadNum(num+unReadCount);
  336. friendDao.update(friend);
  337. }
  338. } catch (SQLException e) {
  339. e.printStackTrace();
  340. }
  341. }
  342. /* 获取消息模块未读数量总和 */
  343. public int getMsgUnReadNumTotal(String ownerId) {
  344. try {
  345. QueryBuilder<Friend, Integer> builder = friendDao.queryBuilder();
  346. builder.selectRaw("sum(unReadNum)");
  347. // 条件 好友status2,显示系统号8
  348. builder.where().eq("ownerId", ownerId).and().ge("status", 2).and().le("status", 8);
  349. GenericRawResults<String[]> results = friendDao.queryRaw(builder.prepareStatementString());
  350. if (results != null) {
  351. String[] first = results.getFirstResult();
  352. if (first != null && first.length > 0) {
  353. return Integer.parseInt(first[0]);
  354. }
  355. }
  356. } catch (SQLException e) {
  357. e.printStackTrace();
  358. }
  359. return 0;
  360. }
  361. /**
  362. * 分页查询最近聊天的好友
  363. *
  364. * @return
  365. */
  366. @Deprecated
  367. public List<Friend> getNearlyFriendMsg(String ownerId, int pageIndex, int pageSize) {
  368. List<Friend> friends = null;
  369. try {
  370. // 过滤条件,content不为空,status ==2(好友) status==8(显示系统号)
  371. PreparedQuery<Friend> preparedQuery = friendDao.queryBuilder().orderBy("timeSend", false).limit((long) pageSize)
  372. .offset((long) pageSize * pageIndex).where().eq("ownerId", ownerId).and().isNotNull("content").and().ge("status", 2).and()
  373. .le("status", 8).prepare();
  374. friends = friendDao.query(preparedQuery);
  375. } catch (SQLException e) {
  376. e.printStackTrace();
  377. }
  378. return friends;
  379. }
  380. /**
  381. * 查询所有最近聊天的好友
  382. *
  383. * @return
  384. */
  385. public List<Friend> getNearlyFriendMsg(String ownerId) {
  386. List<Friend> friends = null;
  387. try {
  388. // 过滤条件,content不为空,status ==2(好友) status==8(显示系统号)
  389. PreparedQuery<Friend> preparedQuery = friendDao.queryBuilder()
  390. .orderBy("timeSend", false)
  391. .where().eq("ownerId", ownerId).and()
  392. .isNotNull("content").and()
  393. .ge("status", Friend.STATUS_FRIEND).and()
  394. .le("status", Friend.STATUS_SYSTEM)
  395. .prepare();
  396. friends = friendDao.query(preparedQuery);
  397. } catch (SQLException e) {
  398. e.printStackTrace();
  399. }
  400. return friends;
  401. }
  402. /**
  403. * 创建或者更新好友
  404. *
  405. * @param friend
  406. * @return
  407. */
  408. public boolean createOrUpdateFriend(Friend friend) {
  409. try {
  410. CreateOrUpdateStatus status = friendDao.createOrUpdate(friend);
  411. return status.isCreated() || status.isUpdated();
  412. } catch (SQLException e) {
  413. e.printStackTrace();
  414. }
  415. return false;
  416. }
  417. /**
  418. * 新建立的朋友关系,那么在朋友表中加入这个新朋友,并提示新朋友
  419. */
  420. public boolean addNewFriendInMsgTable(String loginUserId, String friendId) {
  421. ChatMessage chatMessage = new ChatMessage();
  422. chatMessage.setType(XmppMessage.TYPE_TIP);
  423. chatMessage.setPacketId(UUID.randomUUID().toString().replaceAll("-", ""));// 随机产生一个PacketId
  424. chatMessage.setFromUserId(friendId);
  425. chatMessage.setMessageState(ChatMessageListener.MESSAGE_SEND_SUCCESS);
  426. chatMessage.setTimeSend(TimeUtils.sk_time_current_time());
  427. chatMessage.setContent("你们已经是好友了,开始聊天吧");
  428. chatMessage.setMySend(false);// 表示不是自己发的
  429. // 往消息表里插入一条记录
  430. ChatMessageDao.getInstance().saveNewSingleChatMessage(loginUserId, friendId, chatMessage);
  431. // 往朋友表里面插入一条未读记录
  432. markUserMessageUnRead(loginUserId, friendId);
  433. return true;
  434. }
  435. /**
  436. * 获取备注名
  437. *
  438. * @param ownerId
  439. * @param userId
  440. * @return
  441. */
  442. public String getRemarkName(String ownerId, String userId) {
  443. QueryBuilder<Friend, Integer> builder = friendDao.queryBuilder();
  444. builder.selectRaw("remarkName");
  445. try {
  446. builder.where().eq("ownerId", ownerId).and().eq("userId", userId);
  447. GenericRawResults<String[]> results = friendDao.queryRaw(builder.prepareStatementString());
  448. if (results != null) {
  449. String[] first = results.getFirstResult();
  450. if (first != null && first.length > 0) {
  451. return first[0];
  452. }
  453. }
  454. } catch (SQLException e) {
  455. e.printStackTrace();
  456. }
  457. return "";
  458. }
  459. /**
  460. * 设置备注名
  461. *
  462. * @param loginUserId
  463. * @param userId
  464. * @return
  465. */
  466. public void setRemarkName(String loginUserId, String userId, String remarkName) {
  467. UpdateBuilder<Friend, Integer> builder = friendDao.updateBuilder();
  468. try {
  469. builder.updateColumnValue("remarkName", remarkName);
  470. builder.where().eq("ownerId", loginUserId).and().eq("userId", userId);
  471. friendDao.update(builder.prepare());
  472. } catch (SQLException e) {
  473. e.printStackTrace();
  474. }
  475. }
  476. /**
  477. *
  478. * @param ownerId
  479. * @param friendId
  480. * @return
  481. */
  482. public Friend getFriend(String ownerId, String friendId) {
  483. try {
  484. PreparedQuery<Friend> preparedQuery = friendDao.queryBuilder().where().eq("ownerId", ownerId).and().eq("userId", friendId).prepare();
  485. Friend existFriend = friendDao.queryForFirst(preparedQuery);
  486. return existFriend;
  487. } catch (SQLException e) {
  488. e.printStackTrace();
  489. }
  490. return null;
  491. }
  492. /**
  493. * 获取好友的关系
  494. *
  495. * @param ownerId
  496. * @param friendId
  497. * @return
  498. */
  499. public int getFriendStatus(String ownerId, String friendId) {
  500. QueryBuilder<Friend, Integer> builder = friendDao.queryBuilder();
  501. try {
  502. builder.selectColumns("status");
  503. builder.where().eq("ownerId", ownerId).and().eq("userId", friendId);
  504. GenericRawResults<String[]> results = friendDao.queryRaw(builder.prepareStatementString());
  505. if (results != null) {
  506. String[] first = results.getFirstResult();
  507. if (first != null && first.length > 0) {
  508. return Integer.parseInt(first[0]);
  509. }
  510. }
  511. } catch (NumberFormatException e) {
  512. e.printStackTrace();
  513. } catch (SQLException e) {
  514. e.printStackTrace();
  515. }
  516. return Friend.STATUS_UNKNOW;
  517. }
  518. /**
  519. *
  520. * @param ownerId
  521. * @param friendId
  522. * @return
  523. */
  524. public void deleteFriend(String ownerId, String friendId) {
  525. try {
  526. DeleteBuilder<Friend, Integer> builder = friendDao.deleteBuilder();
  527. builder.where().eq("ownerId", ownerId).and().eq("userId", friendId);
  528. friendDao.delete(builder.prepare());
  529. } catch (SQLException e) {
  530. e.printStackTrace();
  531. }
  532. }
  533. // ////////////////
  534. /**
  535. * 更新朋友表里面的最后一条未读信息
  536. *
  537. * @param friendId
  538. * @param ownerId
  539. * @param message
  540. */
  541. public void updateLastChatMessage(String ownerId, String friendId, ChatMessage message) {
  542. Context context = MyApplication.getInstance();
  543. String content = "";
  544. int type = message.getType();
  545. if (type == XmppMessage.TYPE_TEXT) {
  546. content = message.getContent();
  547. } else if (type == XmppMessage.TYPE_IMAGE) {
  548. content = context.getString(R.string.msg_picture);
  549. } else if (type == XmppMessage.TYPE_VOICE) {
  550. content = context.getString(R.string.msg_voice);
  551. } else if (type == XmppMessage.TYPE_LOCATION) {
  552. content = context.getString(R.string.msg_location);
  553. } else if (type == XmppMessage.TYPE_GIF) {
  554. content = context.getString(R.string.msg_animation);
  555. } else if (type == XmppMessage.TYPE_VIDEO) {
  556. content = context.getString(R.string.msg_video);
  557. }else if (type == XmppMessage.TYPE_FILE){
  558. content = context.getString(R.string.msg_file);
  559. } else if (type == XmppMessage.TYPE_TIP) {
  560. content = message.getContent();
  561. } else if (type == XmppMessage.TYPE_NEWSEE) {// 新关注提示
  562. if (!message.isMySend()) {
  563. content = context.getString(R.string.msg_be_add_attention);
  564. }
  565. } else if (type == XmppMessage.TYPE_SAYHELLO) {// 打招呼提示
  566. if (!message.isMySend()) {
  567. if (TextUtils.isEmpty(message.getContent())) {
  568. content = context.getString(R.string.msg_be_say_hello);
  569. } else {
  570. content = message.getContent();
  571. }
  572. }
  573. } else if (type == XmppMessage.TYPE_PASS) {// 验证通过提示
  574. if (!message.isMySend()) {
  575. content = context.getString(R.string.msg_be_passed);
  576. }
  577. } else if (type == XmppMessage.TYPE_FRIEND) {// 新朋友提示
  578. if (!message.isMySend()) {
  579. content = context.getString(R.string.msg_has_new_friend);
  580. }
  581. } else if (type == XmppMessage.TYPE_FEEDBACK) {// 回话
  582. if (!message.isMySend()) {
  583. if (!TextUtils.isEmpty(message.getContent())) {
  584. content = message.getContent();
  585. }
  586. }
  587. } else if (type == XmppMessage.TYPE_RECOMMEND) {
  588. content = context.getString(R.string.msg_has_new_recommend_friend);
  589. }
  590. /*
  591. * else if (type == XmppMessage.MSG_TYPE_DELSEE) {// 取消关注 if (!message.isMySend()) content = "有人取消关注了你"; } else if (type == XmppMessage.MSG_TYPE_DELALL) {// 新朋友提示 if
  592. * (!message.isMySend()) content = "有人彻底删除了你"; }else if (type == XmppMessage.MSG_TYPE_BLACK) {// 被人拉黑 if (!message.isMySend()) { content =
  593. * context.getString(R.string.be_add_blacklist); } }
  594. */
  595. else {
  596. content = message.getContent();
  597. }
  598. if (TextUtils.isEmpty(content)) {
  599. content = "";
  600. }
  601. Friend friend=FriendDao.getInstance().getFriend(ownerId,friendId);
  602. Log.i("friend","friend status:"+friend.getStatus());
  603. Log.i("friend","friend userId:"+friend.getUserId());
  604. UpdateBuilder<Friend, Integer> builder = friendDao.updateBuilder();
  605. try {
  606. builder.updateColumnValue("content", content);
  607. builder.updateColumnValue("type", type);
  608. //builder.updateColumnValue("status",2);//陌生人也会显示在首页列表
  609. builder.updateColumnValue("timeSend", message.getTimeSend());
  610. builder.where().eq("ownerId", ownerId).and().eq("userId", friendId);
  611. friendDao.update(builder.prepare());
  612. } catch (SQLException e) {
  613. e.printStackTrace();
  614. }
  615. }
  616. public boolean createOrUpdateFriendByNewFriend(NewFriendMessage newFriend, int friendStatus) {
  617. try {
  618. Friend existFriend = getFriend(newFriend.getOwnerId(), newFriend.getUserId());
  619. if (existFriend == null) {
  620. existFriend = new Friend();
  621. existFriend.setOwnerId(newFriend.getOwnerId());
  622. existFriend.setUserId(newFriend.getUserId());
  623. existFriend.setNickName(newFriend.getNickName());
  624. existFriend.setTimeCreate(TimeUtils.sk_time_current_time());
  625. existFriend.setCompanyId(newFriend.getCompanyId());// 可能是公司,这个需要设置
  626. existFriend.setVersion(TableVersionSp.getInstance(MyApplication.getInstance()).getFriendTableVersion(newFriend.getOwnerId()));
  627. }
  628. existFriend.setStatus(friendStatus);
  629. CreateOrUpdateStatus status = friendDao.createOrUpdate(existFriend);
  630. return status.isCreated() || status.isUpdated();
  631. } catch (SQLException e) {
  632. e.printStackTrace();
  633. }
  634. return false;
  635. }
  636. /* 获取面试未读消息总和,面试未读消息直接查询 Friend.ID_INTERVIEW_MESSAGE 该虚拟好友的未读数量即可 */
  637. // public int getInterviewUnReadNum(String ownerId) {
  638. // try {
  639. // QueryBuilder<Friend, Integer> builder = friendDao.queryBuilder();
  640. // builder.where().eq("ownerId", ownerId).and().eq("userId", Friend.ID_INTERVIEW_MESSAGE);
  641. // Friend friend = friendDao.queryForFirst(builder.prepare());
  642. // if (friend != null) {
  643. // return friend.getUnReadNum();
  644. // }
  645. // } catch (SQLException e) {
  646. // e.printStackTrace();
  647. // }
  648. // return 0;
  649. // }
  650. // ///////////////////////////////朋友界面///////////
  651. public List<Friend> getAllFriends(String ownerId) {
  652. try {
  653. PreparedQuery<Friend> preparedQuery = friendDao.queryBuilder().where().eq("ownerId", ownerId).and()
  654. .in("status", new Object[] { Friend.STATUS_SYSTEM, Friend.STATUS_FRIEND }).and().eq("roomFlag", 0).and().eq("companyId", 0)
  655. .prepare();
  656. return friendDao.query(preparedQuery);
  657. } catch (SQLException e) {
  658. e.printStackTrace();
  659. }
  660. return null;
  661. }
  662. public List<Friend> getAllAttentions(String ownerId) {
  663. try {
  664. PreparedQuery<Friend> preparedQuery = friendDao.queryBuilder().where().eq("ownerId", ownerId).and().eq("status", Friend.STATUS_ATTENTION)
  665. .and().eq("roomFlag", 0).and().eq("companyId", 0).prepare();
  666. return friendDao.query(preparedQuery);
  667. } catch (SQLException e) {
  668. e.printStackTrace();
  669. }
  670. return null;
  671. }
  672. public List<Friend> getAllEnterprises(String ownerId) {
  673. try {
  674. PreparedQuery<Friend> preparedQuery = friendDao.queryBuilder().where().eq("ownerId", ownerId).and()
  675. .in("status", new Object[] { Friend.STATUS_ATTENTION, Friend.STATUS_FRIEND }).and().eq("roomFlag", 0).and().gt("companyId", 0)
  676. .prepare();
  677. return friendDao.query(preparedQuery);
  678. } catch (SQLException e) {
  679. e.printStackTrace();
  680. }
  681. return null;
  682. }
  683. public List<Friend> getAllRooms(String ownerId) {
  684. try {
  685. PreparedQuery<Friend> preparedQuery = friendDao.queryBuilder().where().eq("ownerId", ownerId).and().eq("roomFlag", 1).prepare();
  686. return friendDao.query(preparedQuery);
  687. } catch (SQLException e) {
  688. e.printStackTrace();
  689. }
  690. return null;
  691. }
  692. public List<Friend> getAllBlacklists(String ownerId) {
  693. try {
  694. PreparedQuery<Friend> preparedQuery = friendDao.queryBuilder().where().eq("ownerId", ownerId).and().eq("status", Friend.STATUS_BLACKLIST)
  695. .and().eq("roomFlag", 0).prepare();
  696. return friendDao.query(preparedQuery);
  697. } catch (SQLException e) {
  698. e.printStackTrace();
  699. }
  700. return null;
  701. }
  702. /**
  703. * 获取所有联系人,即互相关注和单项关注的人,不包括系统号
  704. *
  705. * @param ownerId
  706. * @return
  707. */
  708. public List<Friend> getAllContacts(String ownerId) {
  709. try {
  710. PreparedQuery<Friend> preparedQuery = friendDao.queryBuilder().where().eq("ownerId", ownerId).and()
  711. .in("status", new Object[] { Friend.STATUS_ATTENTION, Friend.STATUS_FRIEND }).and().eq("roomFlag", 0).and().eq("companyId", 0)
  712. .prepare();
  713. return friendDao.query(preparedQuery);
  714. } catch (SQLException e) {
  715. e.printStackTrace();
  716. }
  717. return null;
  718. }
  719. public Friend getMucFriendByRoomId(String roomId) {
  720. try {
  721. PreparedQuery<Friend> preparedQuery = friendDao.queryBuilder().where().eq("userId", roomId).prepare();
  722. return friendDao.queryForFirst(preparedQuery);
  723. } catch (SQLException e) {
  724. e.printStackTrace();
  725. }
  726. return null;
  727. }
  728. public void updateMucFriendRoomName(String roomId, String roomName) {
  729. try {
  730. UpdateBuilder<Friend, Integer> builder = friendDao.updateBuilder();
  731. builder.updateColumnValue("nickName", roomName).where().eq("userId", roomId);
  732. friendDao.update(builder.prepare());
  733. } catch (SQLException e) {
  734. e.printStackTrace();
  735. }
  736. }
  737. /**
  738. * 更新好友的状态
  739. *
  740. * @param loginUserId
  741. * @param userId
  742. * @return
  743. */
  744. public void updateFriendStatus(String loginUserId, String userId, int status) {
  745. UpdateBuilder<Friend, Integer> builder = friendDao.updateBuilder();
  746. try {
  747. builder.updateColumnValue("status", status);
  748. builder.where().eq("ownerId", loginUserId).and().eq("userId", userId);
  749. friendDao.update(builder.prepare());
  750. } catch (SQLException e) {
  751. e.printStackTrace();
  752. }
  753. }
  754. /**
  755. * 重置好友的消息,让他不在消息界面查询出来
  756. */
  757. public void resetFriendMessage(String loginUserId, String userId) {
  758. UpdateBuilder<Friend, Integer> builder = friendDao.updateBuilder();
  759. try {
  760. builder.updateColumnValue("unReadNum", 0);
  761. builder.updateColumnValue("content", null);
  762. builder.where().eq("ownerId", loginUserId).and().eq("userId", userId);
  763. friendDao.update(builder.prepare());
  764. } catch (SQLException e) {
  765. e.printStackTrace();
  766. }
  767. }
  768. /**
  769. * 用户数据更新,下载关注的用户(包括好友和关注)时候调用
  770. */
  771. public void addAttentionUsers(final Handler handler, final String loginUserId, final List<AttentionUser> attentionUsers,
  772. final OnCompleteListener listener) {
  773. new Thread(new Runnable() {
  774. @Override
  775. public void run() {
  776. checkSystemFriend(loginUserId);
  777. int tableVersion = TableVersionSp.getInstance(MyApplication.getInstance()).getFriendTableVersion(loginUserId);
  778. int newVersion = tableVersion + 1;
  779. if (attentionUsers != null && attentionUsers.size() > 0) {
  780. for (int i = 0; i < attentionUsers.size(); i++) {
  781. AttentionUser attentionUser = attentionUsers.get(i);
  782. if (attentionUser == null) {
  783. continue;
  784. }
  785. String userId = attentionUser.getToUserId();// 好友的Id
  786. QueryBuilder<Friend, Integer> builder = friendDao.queryBuilder();
  787. Friend friend = null;
  788. try {
  789. builder.where().eq("ownerId", loginUserId).and().eq("userId", userId);
  790. friend = friendDao.queryForFirst(builder.prepare());
  791. } catch (SQLException e1) {
  792. e1.printStackTrace();
  793. }
  794. if (friend == null) {
  795. friend = new Friend();
  796. }
  797. friend.setTimeCreate(attentionUser.getCreateTime());
  798. friend.setOwnerId(attentionUser.getUserId());
  799. friend.setUserId(attentionUser.getToUserId());
  800. friend.setNickName(attentionUser.getToNickName());
  801. Log.d("wang","frienddao"+attentionUser.getToNickName());
  802. friend.setRemarkName(attentionUser.getRemarkName());
  803. friend.setRoomFlag(0);// 0朋友 1群组
  804. friend.setCompanyId(attentionUser.getCompanyId());// 公司
  805. int status = (attentionUser.getBlacklist() == 0) ? attentionUser.getStatus() : -1;
  806. friend.setStatus(status);
  807. friend.setVersion(newVersion);// 更新版本
  808. try {
  809. friendDao.createOrUpdate(friend);
  810. } catch (SQLException e) {
  811. e.printStackTrace();
  812. }
  813. }
  814. }
  815. // 本地Sp中保存的版本号更新(+1)
  816. TableVersionSp.getInstance(MyApplication.getInstance()).setFriendTableVersion(loginUserId, newVersion);
  817. // 更新完成,把过期的好友数据删除
  818. try {
  819. DeleteBuilder<Friend, Integer> builder = friendDao.deleteBuilder();
  820. /**
  821. * 删除条件 eq("ownerId", loginUserId) 当前登陆用户的数据<br/>
  822. * eq("roomFlag", 0) 朋友数据(非群聊数据) <br/>
  823. * .eq("companyId", 0) 不是企业用户<br/>
  824. * in("status", new Integer[]{Friend.STATUS_FRIEND,Friend.STATUS_ATTENTION,Friend.STATUS_BLACKLIST}) 好友、关注或者黑名单<br/>
  825. */
  826. builder.where().eq("ownerId", loginUserId).and().eq("roomFlag", 0).and()
  827. .in("status", new Object[] { Friend.STATUS_FRIEND, Friend.STATUS_ATTENTION, Friend.STATUS_BLACKLIST }).and()
  828. .ne("version", newVersion);
  829. friendDao.delete(builder.prepare());
  830. } catch (SQLException e) {
  831. e.printStackTrace();
  832. }
  833. // 朋友数据更新了,在去删除不存在的消息表
  834. List<String> tables = SQLiteRawUtil.getUserChatMessageTables(mHelper.getReadableDatabase(), loginUserId);
  835. if (tables != null && tables.size() > 0) {
  836. for (int i = 0; i < tables.size(); i++) {
  837. String tableName = tables.get(i);
  838. String tablePrefix = SQLiteRawUtil.CHAT_MESSAGE_TABLE_PREFIX + loginUserId;
  839. int index = tableName.indexOf(tablePrefix);
  840. if (index == -1) {
  841. continue;
  842. }
  843. String toUserId = tableName.substring(index + tablePrefix.length(), tableName.length());
  844. if (toUserId.equals(Friend.ID_BLOG_MESSAGE) || toUserId.equals(Friend.ID_INTERVIEW_MESSAGE)
  845. || toUserId.equals(Friend.ID_NEW_FRIEND_MESSAGE) ||
  846. toUserId.equals(Friend.ID_SYSTEM_MESSAGE)) {
  847. continue;
  848. }
  849. Friend friend = getFriend(loginUserId, toUserId);
  850. if (friend == null) {// 删除这张消息表
  851. SQLiteRawUtil.dropTable(mHelper.getReadableDatabase(), tableName);
  852. }
  853. }
  854. }
  855. if (handler != null && listener != null) {
  856. handler.post(new Runnable() {
  857. @Override
  858. public void run() {
  859. listener.onCompleted();
  860. }
  861. });
  862. }
  863. }
  864. }
  865. ).start();
  866. }
  867. /**
  868. * 用户数据更新,下载进入的房间
  869. */
  870. public void addRooms(final Handler handler, final String loginUserId, final List<MucRoom> rooms, final OnCompleteListener listener) {
  871. new Thread(new Runnable() {
  872. @Override
  873. public void run() {
  874. int tableVersion = TableVersionSp.getInstance(MyApplication.getInstance()).getFriendTableVersion(loginUserId);
  875. int newVersion = tableVersion + 1;
  876. if (rooms != null && rooms.size() > 0) {
  877. for (int i = 0; i < rooms.size(); i++) {
  878. MucRoom mucRoom = rooms.get(i);
  879. if (mucRoom == null) {
  880. continue;
  881. }
  882. String userId = mucRoom.getJid();// 好友的Id
  883. QueryBuilder<Friend, Integer> builder = friendDao.queryBuilder();
  884. Friend friend = null;
  885. try {
  886. builder.where().eq("ownerId", loginUserId).and().eq("userId", userId);
  887. friend = friendDao.queryForFirst(builder.prepare());
  888. } catch (SQLException e1) {
  889. e1.printStackTrace();
  890. }
  891. if (friend == null) {
  892. friend = new Friend();
  893. friend.setOwnerId(loginUserId);
  894. friend.setUserId(mucRoom.getJid());
  895. // 新建的房间,根据创建时间取历史记录
  896. friend.setTimeSend((int) mucRoom.getCreateTime());
  897. }
  898. friend.setNickName(mucRoom.getName());
  899. friend.setDescription(mucRoom.getDesc());
  900. friend.setRoomFlag(1);
  901. friend.setRoomId(mucRoom.getId());
  902. friend.setRoomCreateUserId(mucRoom.getUserId());
  903. // timeSend作为取群聊离线消息的标志,所以要在这里设置一个初始值
  904. // friend.setTimeSend(TimeUtils.sk_time_current_time());
  905. friend.setStatus(Friend.STATUS_FRIEND);
  906. friend.setVersion(newVersion);// 更新版本
  907. MucRoomMember memberMy = mucRoom.getMember();
  908. if (memberMy != null) {
  909. friend.setRoomMyNickName(memberMy.getNickName());
  910. friend.setRoomTalkTime(memberMy.getTalkTime());
  911. }
  912. try {
  913. friendDao.createOrUpdate(friend);
  914. } catch (SQLException e) {
  915. e.printStackTrace();
  916. }
  917. }
  918. }
  919. // 本地Sp中保存的版本号更新(+1)
  920. TableVersionSp.getInstance(MyApplication.getInstance()).setFriendTableVersion(loginUserId, newVersion);
  921. // 更新完成,把过期的房间数据删除
  922. try {
  923. DeleteBuilder<Friend, Integer> builder = friendDao.deleteBuilder();
  924. builder.where().eq("ownerId", loginUserId).and().eq("roomFlag", 1).and().eq("status", Friend.STATUS_FRIEND).and()
  925. .ne("version", newVersion);
  926. friendDao.delete(builder.prepare());
  927. } catch (SQLException e) {
  928. e.printStackTrace();
  929. }
  930. // 朋友数据更新了,在去删除不存在的消息表
  931. List<String> tables = SQLiteRawUtil.getUserChatMessageTables(mHelper.getReadableDatabase(), loginUserId);
  932. if (tables != null && tables.size() > 0) {
  933. for (int i = 0; i < tables.size(); i++) {
  934. String tableName = tables.get(i);
  935. String tablePrefix = SQLiteRawUtil.CHAT_MESSAGE_TABLE_PREFIX + loginUserId;
  936. int index = tableName.indexOf(tablePrefix);
  937. if (index == -1) {
  938. continue;
  939. }
  940. String toUserId = tableName.substring(index + tablePrefix.length(), tableName.length());
  941. if (toUserId.equals(Friend.ID_BLOG_MESSAGE) || toUserId.equals(Friend.ID_INTERVIEW_MESSAGE)
  942. || toUserId.equals(Friend.ID_NEW_FRIEND_MESSAGE) ||
  943. toUserId.equals(Friend.ID_SYSTEM_MESSAGE)) {
  944. continue;
  945. }
  946. Friend friend = getFriend(loginUserId, toUserId);
  947. if (friend == null) {// 删除这张消息表
  948. SQLiteRawUtil.dropTable(mHelper.getReadableDatabase(), tableName);
  949. }
  950. }
  951. }
  952. if (handler != null && listener != null) {
  953. handler.post(new Runnable() {
  954. @Override
  955. public void run() {
  956. listener.onCompleted();
  957. }
  958. });
  959. }
  960. }
  961. }
  962. ).start();
  963. }
  964. public void updateNickName(String ownerId, String friendId, String myNickName) {
  965. UpdateBuilder<Friend, Integer> builder = friendDao.updateBuilder();
  966. try {
  967. builder.where().eq("ownerId", ownerId).and().eq("userId", friendId);
  968. builder.updateColumnValue("roomMyNickName", myNickName);
  969. friendDao.update(builder.prepare());
  970. } catch (SQLException e) {
  971. e.printStackTrace();
  972. }
  973. }
  974. }