You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
4.9 KiB
166 lines
4.9 KiB
import db from "../utils/db";
|
|
export default {
|
|
createTalbe() {
|
|
return db.executeSql(`
|
|
CREATE TABLE IF NOT EXISTS chat_groups (
|
|
group_id INTEGER,
|
|
user_id INTEGER,
|
|
realname TEXT,
|
|
avatar TEXT,
|
|
displayName TEXT,
|
|
email TEXT,
|
|
unread INTEGER,
|
|
name_py TEXT,
|
|
owner_id INTEGER,
|
|
notice TEXT,
|
|
is_blacklist TEXT,
|
|
role INTEGER,
|
|
is_notice INTEGER,
|
|
is_top INTEGER,
|
|
setting TEXT,
|
|
id INTEGER,
|
|
account TEXT,
|
|
is_group TEXT,
|
|
group_index TEXT,
|
|
is_online INTEGER,
|
|
is_at INTEGER,
|
|
type TEXT,
|
|
lastContent TEXT,
|
|
lastSendTime INTEGER,
|
|
location TEXT,
|
|
last_login_ip TEXT
|
|
)
|
|
`)
|
|
},
|
|
async getList() {
|
|
try {
|
|
const res = await db.selectSql('select * from chat_groups');
|
|
console.log('原始查询结果:', res); // 查看原始数据结构
|
|
return res;
|
|
} catch (error) {
|
|
console.error('查询失败:', error);
|
|
return [];
|
|
}
|
|
},
|
|
|
|
async deleteallList(){
|
|
try {
|
|
await db.executeSql('DELETE FROM chat_groups');
|
|
return true;
|
|
}catch (error) {
|
|
console.error('删除失败:', error);
|
|
return false;
|
|
}
|
|
},
|
|
|
|
// 批量插入/更新数据
|
|
async batchInsertOrUpdate(groupData) {
|
|
if (!Array.isArray(groupData)) {
|
|
throw new Error('数据必须为数组格式');
|
|
}
|
|
|
|
const dbInstance = await db.createDatabase();
|
|
try {
|
|
|
|
// 开启事务
|
|
await db.executeSql('BEGIN IMMEDIATE TRANSACTION');
|
|
|
|
// 清空旧数据(根据需求决定是否需要)
|
|
await db.executeSql('DELETE FROM chat_groups');
|
|
// console.log('DELETE 操作执行完成');
|
|
const [checkRes] = await db.selectSql('SELECT COUNT(*) AS count FROM chat_groups');
|
|
// console.info('删除表中记录',checkRes.count);
|
|
if (checkRes.count !== 0) {
|
|
throw new Error('数据删除验证失败,表中仍存在记录');
|
|
return true;
|
|
}
|
|
// console.info(groupData);
|
|
// 构建批量插入语句
|
|
const insertPromises = groupData.map(async (item) => {
|
|
// 字段值预处理
|
|
const processedItem = {
|
|
group_id: item.group_id ?? null,
|
|
user_id: item.user_id ?? null,
|
|
realname: item.realname || '',
|
|
avatar: item.avatar || '',
|
|
displayName: item.displayName || '',
|
|
email: item.email || '',
|
|
unread: Number(item.unread) || 0,
|
|
name_py: item.name_py || '',
|
|
owner_id: Number(item.owner_id) || 0,
|
|
notice: item.notice || '',
|
|
is_blacklist: item.is_blacklist || null,
|
|
role: Number(item.role) || 0,
|
|
is_notice: item.is_notice || null,
|
|
is_top: JSON.stringify(item.is_top) || null,
|
|
setting: item.setting ? JSON.stringify(item.setting) : '{}',
|
|
id: item.id,
|
|
account: item.account || '',
|
|
is_group: JSON.stringify(item.is_group) || '',
|
|
group_index: String(item.index || ''),
|
|
is_online: item.is_online || null,
|
|
is_at: JSON.stringify(item.is_at) || null,
|
|
type: item.type || null,
|
|
lastContent: item.lastContent||'',
|
|
lastSendTime: Number(item.lastSendTime) || Date.now(),
|
|
location: item.location || '',
|
|
last_login_ip: item.last_login_ip || ''
|
|
};
|
|
// 删除原接口中的index字段
|
|
// delete processedItem.index;
|
|
|
|
// 提取值数组(注意顺序要与SQL语句中的字段顺序一致)
|
|
const values = [
|
|
processedItem.group_id,
|
|
processedItem.user_id,
|
|
processedItem.realname,
|
|
processedItem.avatar,
|
|
processedItem.displayName,
|
|
processedItem.email,
|
|
processedItem.unread,
|
|
processedItem.name_py,
|
|
processedItem.owner_id,
|
|
processedItem.notice,
|
|
processedItem.is_blacklist,
|
|
processedItem.role,
|
|
processedItem.is_notice,
|
|
processedItem.is_top,
|
|
processedItem.setting,
|
|
processedItem.id,
|
|
processedItem.account,
|
|
processedItem.is_group,
|
|
processedItem.group_index,
|
|
processedItem.is_online,
|
|
processedItem.is_at,
|
|
processedItem.type,
|
|
processedItem.lastContent,
|
|
processedItem.lastSendTime,
|
|
processedItem.location,
|
|
processedItem.last_login_ip
|
|
];
|
|
let value_str = "'" + values.join("','") + "'"
|
|
// console.info(values);
|
|
// 构建INSERT语句
|
|
const sql = `
|
|
INSERT OR REPLACE INTO chat_groups (
|
|
group_id,user_id, realname, avatar, displayName, email, unread, name_py,
|
|
owner_id, notice, is_blacklist, role, is_notice, is_top,
|
|
setting, id, account, is_group, group_index,
|
|
is_online, is_at, type,
|
|
lastContent, lastSendTime,location,last_login_ip
|
|
) VALUES (` + value_str + `)
|
|
`;
|
|
return db.executeSql(sql);
|
|
});
|
|
// console.info(insertPromises,'1111');
|
|
await Promise.all(insertPromises);
|
|
await db.executeSql('COMMIT');
|
|
console.log('首页数据同步成功,插入/更新', groupData.length, '条记录');
|
|
return true;
|
|
} catch (error) {
|
|
await db.executeSql('ROLLBACK');
|
|
console.error('数据同步失败:', error);
|
|
throw new Error('数据同步失败: ' + error.message);
|
|
}
|
|
}
|
|
}
|