package com.mogujie.tt.db.biz; import java.util.List; import android.database.SQLException; import android.text.TextUtils; import com.mogujie.tt.db.DataModel; import com.mogujie.tt.entity.IMRecentContact; import com.mogujie.tt.entity.MessageInfo; import com.mogujie.tt.entity.User; public class DataBaseHelper { private DataModel dataModel = null; private static DataBaseHelper instance; public static DataBaseHelper getInstance() { if (null == instance) { instance = new DataBaseHelper(); } return instance; } /** * @author shuchen */ private DataBaseHelper() { dataModel = DataModel.getInstance(); } /** * 断开数据库 * * @return void */ public void stopDB() { // 断开本地数据库 try { dataModel.close(); } catch (SQLException e) { e.printStackTrace(); } } public int queryLastMsgId() { return dataModel.queryLastMsgId(); } /** * 更新数据库中用户,有则忽略,无则添加 * * @param user * @return Boolean */ public Boolean updateUser(User user) { return dataModel.update(user, false); } /** * 更新数据库中用户,有则忽略,无则添加 * * @param user * @return Boolean */ public Boolean updateUserForced(User user) { return dataModel.update(user, true); } /** * 更新数据库中用户联系人列表,有则忽略,无则添加 * * @param userId 用户或好友用户ID * @param friendUserId 用户或好友用户ID * @return relateId */ public int updateRecentContact(String ownerId, String userId, String friendUserId) { return dataModel.getRelateId(ownerId, userId, friendUserId); } /** * 更新数据库中用户联系人列表,有则忽略,无则添加 * * @param onwerId 用户或好友用户ID * @param friendUserId 用户或好友用户ID * @return relateId */ public int updateRecentContact(String onwerId, String friendUserId) { return dataModel.getRelateId(onwerId, onwerId, friendUserId); } /** * 更新数据库中用户,有则忽略,无则添加 * * @param user * @return User */ public User queryUser(User user) { String userId = user.getUserId(); return dataModel.queryUserByUserId(userId); } /** * 更新数据库中用户,有则忽略,无则添加 * * @param user * @return User */ public User queryUser(String userId) { return dataModel.queryUserByUserId(userId); } /** * 从数据库中删除指定用户 * * @param user * @return void */ public void deleteUser(User user) { dataModel.delete(user); } /** * 添加信息到数据库中 * * @param msgInfo * @return void */ public int pushMsg(String onwerId, MessageInfo msgInfo) { int relateId = dataModel.getRelateId(onwerId, msgInfo.getMsgFromUserId(), msgInfo.getTargetId()); msgInfo.setRelateId(relateId); return dataModel.add(msgInfo); } /** * 从数据库中删除某条消息 * * @param msgInfo * @return void */ public void deleteMsg(MessageInfo msgInfo) { dataModel.delete(msgInfo); } /** * 从数据库拉取某条信息 * * @param msgId 消息唯一ID * @return MessageInfo */ public MessageInfo pullMsgById(int msgId) { return dataModel.queryMsgWithExtraByMsgId(msgId); } /** * 从数据库拉取信息两个用户之间最后一条信息 * * @param userId * @param friendUserId * @return MessageInfo */ public MessageInfo pullMsg(String onwerId, String userId, String friendUserId) { int relateId = dataModel.getRelateId(onwerId, userId, friendUserId); return dataModel.queryLastMsgWithoutExtraByRelateId(onwerId, relateId); } /** * 从数据库获得两个用户之间所有未读信息计数 * * @param userId * @param friendUserId * @return unreadCount */ public int getMsgUnreadCount(String onwerId, String userId, String friendUserId) { int relateId = dataModel.getRelateId(onwerId, userId, friendUserId); return dataModel.queryUnreadCountByRelateId(onwerId, relateId); } /** * 从数据库获得当前登入用户除某个用户外的所有未读信息计数 * * @param onwerId * @param exclUserId 不包含的用户ID * @return unreadCount */ public int getMsgUnreadTotalCount(String onwerId, String exclUserId) { return dataModel.queryUnreadTotalCountExclUserId(onwerId, exclUserId); } /** * 从数据库获得当前登入用户所有未读信息计数 * * @param entityId * @param friendUserId * @return unreadCount */ public int getMsgUnreadTotalCount(String onwerId) { return dataModel.queryUnreadTotalCountByUserId(onwerId); } /** * 在数据库设置某条信息状态(加载状态) * * @param MsgId * @param status * @return Boolean */ public Boolean updateMsgStatus(int MsgId, int status) { return dataModel.updateMsgStatusByMsgId(MsgId, status, 0); } /** * 在数据库设置某条信息状态(是否已读或展现) * * @param MsgId * @param status * @return Boolean */ public Boolean updateMsgReadStatus(int MsgId, int status) { return dataModel.updateMsgStatusByMsgId(MsgId, status, 1); } /** * 在数据库设置某条信息消息ID(修正图文混排时的消息ID) * * @param MsgId * @param MsgParentId * @return Boolean */ public Boolean updateMsgParentId(int MsgId, int MsgParentId) { // return messageDB.updateParentId(MsgId, msgParentId); return false; // 暂时弃用 } /** * 更改图片存储路径 * * @param entityId * @param friendUserId * @return Boolean */ public Boolean updateMsgImageSavePath(int MsgId, String newPath) { return dataModel.updateMsgImageSavePath(MsgId, newPath); } public Boolean updateImagePathUrlInfo(int msgId, String savePath, String url) { return dataModel.updateImagePathUrlInfo(msgId, savePath, url, 0); } /** * 在数据库设置当前登入用户的所有信息状态(加载状态)为oldStatus的设置为status * * @param ownerId 当前登入用户 * @param status 新的消息状态 * @param oldStatus 旧的消息状态 * @return Boolean */ public Boolean updateMsgStatusFromStatus(String ownerId, int status, int oldStatus) { return dataModel.updateAllMsgStatusFromStatus(ownerId, status, oldStatus, 0); } /** * 在数据库设置当前登入用户的所有信息状态(加载状态)为oldStatus的设置为status * * @param ownerId 当前登入用户 * @param status 新的消息状态 * @param oldStatus 旧的消息状态 * @return Boolean */ public Boolean updateMsgReadStatusFromStatus(String ownerId, int status, int oldStatus) { return dataModel.updateAllMsgStatusFromStatus(ownerId, status, oldStatus, 1); } /** * 在数据库设置当前登入用户收到当前聊天对象的所有信息状态(加载状态) * * @param userId 当前登入用户 * @param friendUserId 当前聊天对象 * @return Boolean */ public Boolean updateMsgStatus(String userId, String friendUserId, int status) { int relateId = dataModel.getRelateId(userId, userId, friendUserId); return dataModel.updateAllMsgStatus(userId, relateId, status, 0); } /** * 在数据库设置当前登入用户收到当前聊天对象的所有信息状态(是否已读或展现) * * @param userId 当前登入用户 * @param friendUserId 当前聊天对象 * @return Boolean */ public Boolean updateMsgReadStatus(String userId, String friendUserId, int status) { int relateId = dataModel.getRelateId(userId, userId, friendUserId); return dataModel.updateAllMsgStatus(userId, relateId, status, 1); } /** * 从数据库拉取信息两个用户之间部分信息(由偏移量和信息条数决定) * * @param userId 用户ID * @param friendUserId 好友ID * @param msgId 起始ID * @param offset 距离起始ID的偏移量 * @param size 拉取的消息条数 * @return List<MessageInfo> */ public List<MessageInfo> pullMsg(String userId, String friendUserId, int msgId, int offset, int size) { if (TextUtils.isEmpty(userId)) { return null; } int relateId = dataModel.getRelateId(userId, userId, friendUserId); return dataModel.queryHistoryMsg(userId, relateId, msgId, offset, size); } /** * 从数据库拉取用户的所有最近联系人列表 * * @return List<IMRecentContact> */ public List<IMRecentContact> pullRecentContact() { return dataModel.queryAllContacts(); } /** * 从数据库拉取用户的所有最近联系人的用户信息 * * @param userId * @param friendUserId * @return List<String> */ public List<String> pullFriendUserIds(String userId) { return dataModel.queryAllFriendUserId(userId); } /* * @return 返回删除消息的时间分隔线 */ public int checkAndDeleteIfNeed() { return dataModel.checkAndDeleteIfNeed(); } }