mall_client/zyhs_app_java/zyhs3_uniapp/common/im/db.js

453 lines
12 KiB
JavaScript
Raw Normal View History

2026-03-13 07:50:35 +00:00
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
}