mall_client/zyhs3_uniapp/common/im/db.js

453 lines
12 KiB
JavaScript
Raw 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.

let name = "im" // 库名
let path = "_doc/im.db" // 存放路径
let sessionList = "conversation" // 会话表名
let chatList = "chatList" // 聊天表
function getUserId(){
let userInfo = uni.getStorageSync("userInfo")
return userInfo.id
}
// 数据库是否打开
function isOpenDB(){
let open = plus.sqlite.isOpenDatabase({
name: name,
path: path
})
return open
}
// 打开数据库
function openDB(callback){
plus.sqlite.openDatabase({
name: name,
path: path,
success(res){
callback(true)
},
fail(err){
callback(false)
}
})
}
// 关闭数据库
function closeSQL(){
plus.sqlite.closeDatabase({
name: name
})
}
// 判断表是否存在
function tableIshas(db, callback){
plus.sqlite.selectSql({
name: name,
sql: `select count(*) from sqlite_master where type='table' and name = '${db}'`,
success(res){
console.log("tableIshas---success---", res)
callback(res[0]["count(*)"])
},
fail(err){
console.log("tableIshas---fail---", err)
callback(false)
}
})
}
// 获取未读消息数量
function getUnReadTotal(){
let db = sessionList + "_" + getUserId()
return new Promise((resolve,reject) =>{
plus.sqlite.selectSql({
name: name,
sql: `select sum(localUnreadNumber) from '${db}'`,
success(res){
resolve(res[0]["sum(localUnreadNumber)"])
},
fail(err){
console.log("........getUnReadTotal.....err......", err)
reject(err)
}
})
})
}
/**
* 创建聊天表
* 数据结构:
* {"froms":"100",
* "to":"7a7ff181297f4fbf9be3c25860486c23",
* "conversationId":"7a7ff181297f4fbf9be3c25860486c23", 会话id
* "createTime":"1606212063382",
* "msgType":"0",
* "uid": "xxxxxxxxxxxxxxxxxx", 消息id
* "status": 1, (默认)1-发送成功 2-发送失败
* "content":"内容"}
* */
function createChatListSQL(callback){
let db = chatList + "_" + getUserId()
plus.sqlite.executeSql({
name: name,
//表格创建或者打开,后面为表格结构
sql:'create table if not exists '+db+'("_id" INTEGER PRIMARY KEY AUTOINCREMENT,"conversationId" TEXT,"uid" TEXT,"froms" TEXT,"tos" TEXT,"createTime" INTEGER,"msgType" INTEGER,"content",TEXT)',
success(e){
console.log("createChatListSQL---success---", db)
callback(e);
},
fail(e){
console.log("createChatListSQL---fail---", db)
callback(e);
}
})
}
/**
* 创建会话表
* 数据结构:
* {
* id 会话id
* type 会话类型1-用户 2-配送员 3-店铺
* toType 会话类型1-用户 2-配送员 3-店铺 4-配送员用户 5-店铺客户
* userId 我的id
* toUserId 对方用户id
* imAccount 我的im账号
toImAccount 对方im账号
toConversationId 对方会话ID
nickname 对方昵称
headPortrait 对方头像
storeLogoImage 对方店铺Id
storeId 对方店铺头像
storeName 对方店铺名称
isStore 对方是否是商家
isDistributor 对方是否是配送员
unreadNumber 服务器剩余未读消息
localUnreadNumber 本地未读消息(前端用)
* }
* */
function createSessionListSQL(callback){
let db = sessionList + "_" + getUserId()
let sql = "create table if not exists " + db + "(";
sql += "'id' TEXT,";
sql += "'type' INTEGER,";
sql += "'toType' INTEGER,";
sql += "'userId' TEXT,";
sql += "'toUserId' TEXT,";
sql += "'imAccount' TEXT,";
sql += "'toImAccount' TEXT,";
sql += "'toConversationId' TEXT,";
sql += "'nickname' TEXT,";
sql += "'headPortrait' TEXT,";
sql += "'storeLogoImage' TEXT,";
sql += "'storeId' TEXT,";
sql += "'storeName' TEXT,";
sql += "'isStore' INTEGER,";
sql += "'isDistributor' INTEGER,";
sql += "'unreadNumber' INTEGER,";
sql += "'localUnreadNumber' INTEGER";
sql += " )";
plus.sqlite.executeSql({
name: name,
//表格创建或者打开,后面为表格结构
sql: sql,
success(e){
console.log("createSessionListSQL---success---", db)
callback(e);
},
fail(e){
console.log("createSessionListSQL---fail---", db)
callback(e);
}
})
}
/**
* 聊天表插入数据
* @param {String} db 表名
* @param {Object} data 插入的数据
* */
function addDataToChatTable(data, callback){
if (!data || data.toString() === "{}") return
let sqlInsert = "insert into "+(chatList+"_"+getUserId())+"(conversationId,uid,froms,tos,createTime,msgType,content) values('";
sqlInsert += data.conversationId + "','";
sqlInsert += data.uid + "','";
sqlInsert += data["from"] + "','";
sqlInsert += data["to"] + "','";
sqlInsert += data.createTime + "','";
sqlInsert += data.msgType + "','";
// sqlInsert += (data.status || 1) + "','";
sqlInsert += data.content + "')";
plus.sqlite.executeSql({
name: name,
sql: sqlInsert,
success: function(e){
console.log("========聊天表插入数据成功========", e)
callback(true)
},
fail: function(e){
console.log("========聊天表插入数据失败========", e)
callback(false)
}
})
}
/**
* 会话表插入数据
* @param {String} db 表名
* @param {Object} data 插入的数据
* */
function addDataToSessionTable(data, callback){
if (!data || data.toString() === "{}") return
let sqlInsert = "insert into "+(sessionList+"_"+getUserId())+" values('";
sqlInsert += data.id + "','";
sqlInsert += data.type + "','";
sqlInsert += data.toType + "','";
sqlInsert += data.userId + "','";
sqlInsert += data.toUserId + "','";
sqlInsert += data.imAccount + "','";
sqlInsert += data.toImAccount + "','";
sqlInsert += data.toConversationId + "','";
sqlInsert += data.nickname + "','";
sqlInsert += data.headPortrait + "','";
sqlInsert += data.storeLogoImage + "','";
sqlInsert += data.storeId + "','";
sqlInsert += data.storeName + "','";
sqlInsert += data.isStore + "','";
sqlInsert += data.isDistributor + "','";
sqlInsert += data.unreadNumber + "','";
sqlInsert += data.localUnreadNumber + "')";
// sqlInsert += "xxx" + "')";
plus.sqlite.executeSql({
name: name,
sql: sqlInsert,
success: function(e){
console.log("========会话表插入数据成功========", e)
callback(true)
},
fail: function(e){
console.log("========会话表插入数据失败========", e)
callback(false)
}
})
}
/**
* 查询获取数据库里的数据
* @param {String} db 表名,默认会话信息表
* @param {String} aa,bb分别为列名和列的值 cc,dd同前面
* 传的参数按1,3,5来传传一个传三个传五个参数不能只传两个或者四个
* */
function selectInformationType(db, aa, bb, cc, dd){
if (!db) db = sessionList
db = db+"_"+getUserId()
console.log('....///////////.......................................', db)
if(db !== undefined){
//第一个是表单名称,后两个参数是列表名,用来检索
let sql = ""
if(aa !== undefined && cc !== undefined){
//两个检索条件
sql = `select * from ${db} where ${aa}='${bb}' and ${cc}='${dd}'`
}
if(aa !== undefined && cc == undefined){
//一个检索条件
sql = `select * from ${db} where ${aa}='${bb}'`
}
if(aa !== undefined && bb == undefined){
//固定条件类型查询
if(aa == "user"){//查询toType为1=用户2=配送员3=商家
sql = `select * from ${db} where toType in(1,2,3)`
}else if(aa == "distributor"){//查询toType为4=配送员客户
sql = `select * from ${db} where toType=4`
}else if(aa == "store"){//查询toType为5=店铺客户
sql = `select * from ${db} where toType=5`
}
}
if(aa == undefined){
sql = `select * from ${db}`
}
return new Promise((resolve,reject) =>{
plus.sqlite.selectSql({
name: name,
sql: sql,
success(e){
resolve(e);
},
fail(e){
reject(e);
}
})
})
}else{
return new Promise((resolve,reject) =>{reject("错误查询")});
}
}
/**
* 删除数据库里的数据
* @param {String} db 表名
* @param {String} sol,qq分别为列名和列的值 ww,ee同前面
* 传的参数按1,3,5来传传一个传三个传五个参数不能只传两个或者四个
* */
function deleteInformationType(db,sol,qq,ww,ee){
if(db !== undefined && sol !== undefined){
//listId为表名,后面两个是列表名,检索用的
if (!db) db = chatList
db = db+"_"+getUserId()
let sql = ""
if(ww !== undefined){
//两个检索条件
sql = `delete from ${db} where ${sol}='${qq}' and ${ww}='${ee}'`
}else{
//一个检索条件
sql = `delete from ${db} where ${sol}='${qq}'`;
}
return new Promise((resolve,reject) =>{
plus.sqlite.executeSql({
name: name,
sql: sql,
success(e){
console.log("----删除成功----", e)
resolve(e);
},
fail(e){
console.log("----删除失败----", e)
reject(e);
}
})
})
}else{
return new Promise((resolve,reject) =>{reject("错误删除")});
}
}
/**
* 删除表所有数据
* @param {String} db 表名
* */
function delAllDataBySQL(db, callback){
if (!db) db = sessionList
db = db+"_"+getUserId()
plus.sqlite.executeSql({
name: name,
sql: "delete from " + db,
success(e){
callback(true)
},
fail(e){
callback(false)
}
})
}
/**
* 修改数据表里的数据
* @param {String} db 表名 默认为会话表
* @param {String} cell为要修改的列名cont为要修改为什么值use,sel为搜索条件分别是列名和列值
* 传的参数按1,3,5来传传一个传三个传五个参数不能只传两个或者四个
* */
function updateInformation(db, cell, cont, use, sel){
if (!db) db = sessionList
db = db+"_"+getUserId()
var sql;
if(use == undefined){
sql = `update ${db} set ${cell}='${cont}'`
}else{
sql = `update ${db} set ${cell}='${cont}' where ${use}='${sel}'`
}
//where前面的是要修改的后面的是条件选择哪个
return new Promise((resolve,reject) =>{
plus.sqlite.executeSql({
name: name,
sql:sql,
success(e){
console.log("...../////......//////.....修改成功....../////...../////....")
resolve(e);
},
fail(e){
console.log("...../////......//////.....修改失败....../////...../////....")
reject(e);
}
})
})
}
/**
* 修改会话表数据
* @param {String} data 参数
* @param {String} 分别是列名和列值
* 传的参数按1,3,5来传传一个传三个传五个参数不能只传两个或者四个
* */
function updateSessionInformation(data, use, sel, callback){
let db = sessionList + "_" + getUserId()
let sql = "update "+ db +" set ";
sql += "nickname='"+data.nickname+"', ";
sql += "headPortrait='"+data.headPortrait+"', ";
sql += "isStore='"+data.isStore+"', ";
sql += "isDistributor='"+data.isDistributor+"', ";
sql += "unreadNumber='"+data.unreadNumber+"', ";
sql += "localUnreadNumber='"+data.localUnreadNumber+"' ";
sql += "where " + use + "=" + sel;
//where前面的是要修改的后面的是条件选择哪个
plus.sqlite.executeSql({
name: name,
sql:sql,
success(e){
callback(true)
},
fail(e){
callback(false)
console.log(".....updateSessionInformation-----fail。。。。", e)
}
})
}
/**
* 一次获取指定数据条数
* @param {String} db 表名
* @param {String} aa 列名
* @param {String} bb 列值
* @param {Number} num 页数
* @param {Number} size 条数默认20
* @param {String} sort 排序 desc倒序 asc顺序默认
* */
function pullSQL(db, aa, bb, num=0, size = 20, sort="asc"){
return new Promise((resolve,reject) =>{
if (!db) db = chatList
db = db+"_"+getUserId()
let sql = ""
if (!aa) {
sql = `select * from ${db} limit ${size} offset ${num}`
} else {
sql = `select * from ${db} where ${aa}='${bb}' order by _id ${sort} limit ${size} offset ${num}`
}
plus.sqlite.selectSql({
name: name,
sql: sql,
success(data){
console.log(".....pullSQL-----success。。。。", data)
resolve(data);
},
fail(e){
console.log(".....pullSQL-----fail。。。。", e)
reject(e);
}
})
})
}
export {
isOpenDB,
openDB,
closeSQL,
tableIshas,
getUnReadTotal,
createChatListSQL,
createSessionListSQL,
addDataToChatTable,
addDataToSessionTable,
selectInformationType,
deleteInformationType,
updateInformation,
updateSessionInformation,
pullSQL
}