383 lines
10 KiB
JavaScript
383 lines
10 KiB
JavaScript
//表名变更 messages -> messages_1
|
||
var messageDao = {
|
||
db: "dianwutong",
|
||
table: "messages_1",
|
||
open: {}, //打开数据库
|
||
initTable: {}, //创建数据库
|
||
updateData: {}, //同步服务器数据
|
||
}
|
||
|
||
messageDao.open = function(callback) {
|
||
var db = api.require("db");
|
||
db.openDatabase({
|
||
name: messageDao.db
|
||
}, function(ret, err) {
|
||
if (!err && ret.status) {
|
||
if (typeof(callback) == "function") {
|
||
callback(db);
|
||
}
|
||
}
|
||
})
|
||
}
|
||
|
||
//查询
|
||
messageDao.query = function(sql, callback) {
|
||
messageDao.open(function(db) {
|
||
db.selectSql({
|
||
name: messageDao.db,
|
||
sql: sql
|
||
}, function(ret, err) {
|
||
if (typeof(callback) == "function") {
|
||
callback(ret, err);
|
||
// console.log(sql);
|
||
// console.log("查到的数据");
|
||
// console.log(JSON.stringify(ret));
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
//执行
|
||
messageDao.exec = function(sql, callback) {
|
||
|
||
messageDao.open(function(db) {
|
||
|
||
db.executeSql({
|
||
name: messageDao.db,
|
||
sql: sql
|
||
}, function(ret, err) {
|
||
// console.log(sql);
|
||
// console.log("执行结果");
|
||
// console.log(JSON.stringify(err));
|
||
if (typeof(callback) == "function") {
|
||
callback(ret, err);
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
//创建message表
|
||
messageDao.initTable = function(callback) {
|
||
var sql = " CREATE TABLE IF NOT EXISTS `" + this.table + "` ( " +
|
||
" `msg_id` INT(11) NOT NULL, " +
|
||
" `user_id` INT(11) NOT NULL, " +
|
||
" `msg_type` INT(11), " +
|
||
" `msg_content` LONGTEXT, " +
|
||
" `content_id` INT(11), " +
|
||
" `is_read` INT(11), " +
|
||
" `msg_title` VARCHAR(256), " +
|
||
" `create_time` TIMESTAMP, " +
|
||
" `click_enable` INT(11), " +
|
||
" PRIMARY KEY (`msg_id`) " +
|
||
" )";
|
||
|
||
messageDao.exec(sql, function(ret, err){
|
||
if(callback){
|
||
callback(ret, err);
|
||
}
|
||
});
|
||
|
||
}
|
||
|
||
//从数据库同步数据
|
||
messageDao.updateData = function(callback) {
|
||
|
||
if( !userMaxMessageIdDao ){
|
||
console.error("找不到:userMaxMessageIdDao");
|
||
return false;
|
||
}
|
||
var userId = $api.getStorage("userId");
|
||
|
||
userMaxMessageIdDao.getMaxId(userId, function(maxId) {
|
||
if( !maxId ){
|
||
maxId = null;
|
||
}
|
||
fetchMessages(maxId, writeDB);
|
||
})
|
||
|
||
function fetchMessages(maxId, callback) {
|
||
var data = {
|
||
userId: userId,
|
||
msgId: maxId
|
||
}
|
||
|
||
var url = "/ems/rest/message/list";
|
||
|
||
$api.get(url, data, function(ret, err) {
|
||
if (!err && ret && ret.code == "200") {
|
||
|
||
if (typeof(callback) == "function") {
|
||
callback(ret.body);
|
||
}
|
||
|
||
} else {
|
||
api.toast({
|
||
msg: 'code:'+ret.code
|
||
});
|
||
}
|
||
});
|
||
}
|
||
|
||
function writeDB(list) {
|
||
var length = list.length;
|
||
var maxId = 0;
|
||
if (length == 0) {
|
||
if (typeof(callback) == "function") {
|
||
callback();
|
||
}
|
||
api.sendEvent({
|
||
name: 'messageUpdated'
|
||
});
|
||
return false;
|
||
}
|
||
var userId = $api.getStorage("userId");
|
||
|
||
var sql = 'insert into ' + messageDao.table + ' values';
|
||
|
||
for (var i = 0; i < length; i++) {
|
||
sql += "(";
|
||
sql += list[i].msgId + ",";
|
||
sql += userId + ",";
|
||
sql += list[i].msgType + ",";
|
||
sql += "'" + list[i].msgContent + "',";
|
||
sql += list[i].contentId + ",";
|
||
sql += "0,";
|
||
sql += "'" + list[i].msgTitle + "',";
|
||
sql += list[i].createTime/1000 + ","; // 避免数据溢出 除以1000
|
||
sql += (list[i].onlyRead == 0 ? 1 : 0);
|
||
sql += "),";
|
||
|
||
if(maxId < list[i].msgId){
|
||
maxId = list[i].msgId;
|
||
}
|
||
}
|
||
|
||
sql = sql.slice(0, -1);
|
||
messageDao.exec(sql, function(ret, err) {
|
||
// console.log(JSON.stringify(ret), 'messageDao157')
|
||
if (!err) {
|
||
api.sendEvent({
|
||
name: 'messageUpdated'
|
||
});
|
||
|
||
userMaxMessageIdDao.updateUserMessageId(userId, maxId);
|
||
}
|
||
|
||
if (typeof(callback) == "function") {
|
||
callback();
|
||
}
|
||
})
|
||
|
||
}
|
||
|
||
}
|
||
|
||
//获取每类未读消息的数量
|
||
messageDao.getTypeUnReadCount = function(callback) {
|
||
var userId = $api.getStorage("userId");
|
||
var sql = "select substr(msg_type, 1,2) type, count(msg_id) sum from " + this.table + " where user_id=" + userId + " and is_read=0 group by substr(msg_type, 1,2)";
|
||
this.query(sql, function(ret, err) {
|
||
if (!err && ret && ret.status && typeof(callback) == "function") {
|
||
callback(ret.data);
|
||
}
|
||
})
|
||
}
|
||
|
||
//获取没类消息的最新消息的时间
|
||
messageDao.getTypeLatestTime = function(callback){
|
||
|
||
var userId = $api.getStorage('userId');
|
||
var sql = "select max(create_time) create_time, substr(msg_type, 1, 2) type from " + this.table + " where user_id="+ userId + " group by substr(msg_type, 1,2)";
|
||
this.query(sql, function(ret, err) {
|
||
if (!err && ret && ret.status && typeof(callback) == "function") {
|
||
var data = ret.data;
|
||
var length = data.length;
|
||
for(var i=0; i<length; i++){
|
||
data[i].create_time = data[i].create_time*1000;
|
||
}
|
||
callback(ret.data);
|
||
}
|
||
})
|
||
}
|
||
|
||
//获取所有未读消息的数量
|
||
messageDao.getAllUnReadCount = function(callback) {
|
||
var userId = $api.getStorage("userId");
|
||
var sql = "select count(msg_id) sum from " + this.table + " where user_id=" + userId + " and is_read=0";
|
||
this.query(sql, function(ret, err) {
|
||
if (!err && ret && ret.status && typeof(callback) == "function") {
|
||
if (ret.data[0]) {
|
||
callback(ret.data[0].sum);
|
||
} else {
|
||
callback(0);
|
||
}
|
||
}
|
||
})
|
||
}
|
||
|
||
//分页获取消息列表
|
||
messageDao.getOldMessages = function(types, page, pageSize, oldMaxId , callback) {
|
||
var from = page * pageSize;
|
||
var to = (page + 1) * pageSize;
|
||
var userId = $api.getStorage("userId");
|
||
types = types.join(',');
|
||
|
||
var sql = "select * from " + this.table + " where user_id=" + userId + " and msg_type in (" + types + ") ";
|
||
|
||
if ( oldMaxId ) {
|
||
|
||
sql += ' and msg_id < ' + oldMaxId;
|
||
|
||
}
|
||
|
||
sql += " order by msg_id desc limit " + pageSize;
|
||
|
||
// console.log(sql);
|
||
|
||
messageDao.query(sql, function(ret, err) {
|
||
// _log(ret);
|
||
if (!err && ret && ret.data && typeof(callback) == "function") {
|
||
|
||
var data = ret.data;
|
||
var length = data.length;
|
||
for(var i=0; i<length; i++){
|
||
data[i].create_time = data[i].create_time*1000;
|
||
}
|
||
callback(ret.data);
|
||
|
||
} else if (typeof(callback) == "function") {
|
||
callback([]);
|
||
}
|
||
})
|
||
}
|
||
|
||
//获取新消息
|
||
messageDao.getNewMessages = function(types, newMinId, callback ){
|
||
|
||
if(!newMinId){
|
||
if (typeof(callback) == "function") {
|
||
callback([]);
|
||
}
|
||
return false;
|
||
}
|
||
|
||
var types = types.join(',');
|
||
var userId = $api.getStorage("userId");
|
||
|
||
var sql = "select * from " + this.table + " where user_id=" + userId + " and msg_type in (" + types + ") ";
|
||
|
||
if ( newMinId ) {
|
||
|
||
sql += ' and msg_id > ' + newMinId;
|
||
|
||
}
|
||
|
||
sql += " order by msg_id asc ";
|
||
|
||
messageDao.query(sql, function(ret, err) {
|
||
if (!err && ret && ret.data && typeof(callback) == "function") {
|
||
var data = ret.data;
|
||
var length = data.length;
|
||
for(var i=0; i<length; i++){
|
||
data[i].create_time = data[i].create_time*1000;
|
||
}
|
||
callback(ret.data);
|
||
} else if (typeof(callback) == "function") {
|
||
callback([]);
|
||
}
|
||
})
|
||
|
||
|
||
}
|
||
|
||
//更新一类/或多类的消息为已读
|
||
messageDao.batchUpdateMessageToIsRead = function(msgTypes, callback) {
|
||
var types = msgTypes.join(',');
|
||
var sql = "update " + this.table + " set is_read = 1 where msg_type in ( " + types + ')';
|
||
messageDao.exec(sql, function(ret, err) {
|
||
if (!err) {
|
||
api.sendEvent({
|
||
name: 'messageUpdated'
|
||
});
|
||
|
||
if (typeof(callback) == "function") {
|
||
callback(ret);
|
||
}
|
||
}
|
||
})
|
||
}
|
||
|
||
//更新消息为已读
|
||
messageDao.updateMessageToIsRead = function(msgId, callback) {
|
||
var sql = "update " + this.table + " set is_read = 1 where msg_id = " + msgId;
|
||
messageDao.exec(sql, function(ret, err) {
|
||
if (!err) {
|
||
api.sendEvent({
|
||
name: 'messageUpdated'
|
||
});
|
||
|
||
if (typeof(callback) == "function") {
|
||
callback(ret);
|
||
}
|
||
}
|
||
})
|
||
}
|
||
|
||
//清空所有记录
|
||
messageDao.clearAll = function(callback) {
|
||
var userId = $api.getStorage("userId");
|
||
var sql = "delete from " + this.table + " where user_id = " + userId;
|
||
|
||
|
||
messageDao.exec(sql, function(ret, err) {
|
||
|
||
if (!err) {
|
||
api.sendEvent({
|
||
name: 'messageUpdated'
|
||
});
|
||
|
||
if (typeof(callback) == "function") {
|
||
callback(ret);
|
||
}
|
||
}
|
||
})
|
||
}
|
||
|
||
// 删除一条消息
|
||
messageDao.deleteOne = function(msgId, callback){
|
||
var sql = "delete from `" + this.table + "` where msg_id=" + msgId;
|
||
|
||
this.exec(sql, function(ret, err) {
|
||
|
||
if (!err) {
|
||
api.sendEvent({
|
||
name: 'messageUpdated',
|
||
extra: {
|
||
type: 'delete',
|
||
msgId: msgId
|
||
}
|
||
});
|
||
|
||
if (typeof(callback) == "function") {
|
||
callback(ret);
|
||
}
|
||
}
|
||
})
|
||
|
||
}
|
||
|
||
// 获取表中各个用户最大的消息id
|
||
messageDao.getMaxIds = function(callback){
|
||
var sql = "select max(msg_id) as msg_id, user_id from `" + this.table + "` group by user_id";
|
||
this.query(sql, function(ret,err){
|
||
var list = [];
|
||
if(ret){
|
||
list = ret.data;
|
||
}
|
||
|
||
if(callback){
|
||
callback(list);
|
||
}
|
||
})
|
||
}
|