app-xiangsonghua/app-saas-src/script/dao/messageDao.js
2024-12-26 17:00:06 +08:00

383 lines
10 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//表名变更 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);
}
})
}