feat: 添加rawSql/getContactStats/getContactsFull/getGroupsFull调试接口 20260518

This commit is contained in:
2026-05-18 20:15:38 +08:00
parent 56a51e78df
commit 6a3ab21672

View File

@@ -1428,8 +1428,85 @@ rpc.exports = {
}
},
// ==================== 调试/统计接口 ====================
rawSql: function (params) {
var sql = (params && params.sql) || '';
if (!sql) return { success: false, error: '缺少 sql 参数' };
try {
return Java.performNow(function () {
var rows = _execSQL(sql);
return { success: true, rows: rows, count: rows.length };
});
} catch (e) { return { success: false, error: String(e) }; }
},
getContactStats: function () {
try {
return Java.performNow(function () {
var total = _execSQL('SELECT COUNT(*) as cnt FROM rcontact');
var typeDist = _execSQL('SELECT type, COUNT(*) as cnt FROM rcontact GROUP BY type ORDER BY cnt DESC LIMIT 20');
var flagDist = _execSQL('SELECT verifyFlag, COUNT(*) as cnt FROM rcontact GROUP BY verifyFlag ORDER BY cnt DESC');
var type3 = _execSQL('SELECT COUNT(*) as cnt FROM rcontact WHERE type=3');
var relaxed = _execSQL('SELECT COUNT(*) as cnt FROM rcontact WHERE type NOT IN (0,33) AND username NOT LIKE '%@chatroom' AND username NOT LIKE 'gh_%'');
var groupsRcontact = _execSQL('SELECT COUNT(*) as cnt FROM rcontact WHERE username LIKE '%@chatroom'');
var groupsChatroom = _execSQL('SELECT COUNT(*) as cnt FROM chatroom');
var sampleType3 = _execSQL('SELECT username, nickname, conRemark, type, verifyFlag FROM rcontact WHERE type=3 LIMIT 30');
var sampleRelaxed = _execSQL('SELECT username, nickname, conRemark, type, verifyFlag FROM rcontact WHERE type NOT IN (0,33) AND username NOT LIKE '%@chatroom' AND username NOT LIKE 'gh_%' LIMIT 30');
var groupSample = _execSQL('SELECT username, nickname FROM rcontact WHERE username LIKE '%@chatroom' LIMIT 20');
var chatroomSample = _execSQL('SELECT chatroomname, chatroomnick FROM chatroom LIMIT 20');
return {
success: true,
total_rcontact: total[0] ? total[0].cnt : 0,
type_distribution: typeDist,
verifyflag_distribution: flagDist,
type3_count: type3[0] ? type3[0].cnt : 0,
relaxed_count: relaxed[0] ? relaxed[0].cnt : 0,
groups_in_rcontact: groupsRcontact[0] ? groupsRcontact[0].cnt : 0,
groups_in_chatroom: groupsChatroom[0] ? groupsChatroom[0].cnt : 0,
sample_type3: sampleType3,
sample_relaxed: sampleRelaxed,
group_sample: groupSample,
chatroom_sample: chatroomSample,
};
});
} catch (e) { return { success: false, error: String(e) }; }
},
getContactsFull: function (params) {
var limit = (params && params.limit) || 500;
var offset = (params && params.offset) || 0;
var filterType = (params && params.filter_type);
try {
return Java.performNow(function () {
var sql;
if (filterType !== undefined && filterType !== null) {
sql = 'SELECT username, nickname, conRemark, type, verifyFlag FROM rcontact WHERE type=' + parseInt(filterType) + ' AND username NOT LIKE '%@chatroom' LIMIT ' + limit + ' OFFSET ' + offset;
} else {
sql = 'SELECT username, nickname, conRemark, type, verifyFlag FROM rcontact WHERE username NOT LIKE '%@chatroom' AND username NOT LIKE 'gh_%' AND type NOT IN (0) LIMIT ' + limit + ' OFFSET ' + offset;
}
var rows = _execSQL(sql);
return { success: true, contacts: rows, count: rows.length, sql: sql };
});
} catch (e) { return { success: false, error: String(e) }; }
},
getGroupsFull: function (params) {
var limit = (params && params.limit) || 500;
try {
return Java.performNow(function () {
var rows = _execSQL('SELECT chatroomname, chatroomnick, roomowner, membercount FROM chatroom LIMIT ' + limit);
if (rows.length > 0 && !rows[0].error) {
return { success: true, source: 'chatroom_table', groups: rows.map(function (r) {
return { group_id: r.chatroomname, name: r.chatroomnick || r.chatroomname, owner: r.roomowner, member_count: r.membercount };
}), count: rows.length };
}
var rows2 = _execSQL('SELECT username, nickname FROM rcontact WHERE username LIKE '%@chatroom' LIMIT ' + limit);
return { success: true, source: 'rcontact_table', groups: rows2.map(function (r) {
return { group_id: r.username, name: r.nickname };
}), count: rows2.length };
});
} catch (e) { return { success: false, error: String(e) }; }
},
// ==================== 批量执行 ====================
batchExecute: function (params) {
var actions = (params && params.actions) || [];
if (actions.length === 0) return { success: false, error: '缺少 actions' };