|
@ -98,7 +98,10 @@ class Migration {
|
|
|
*/
|
|
|
static migrateMUC() {
|
|
|
// 选择出所有的咨询组
|
|
|
let sql = "select g.to_gid from im_new.msg_group g where length(g.to_gid) > 20 group by g.to_gid order by g.to_gid";
|
|
|
let sql = "select * from wlyy.msg_p2p p " +
|
|
|
"where p.type = 1 and ((p.from_uid in (select code from wlyy.wlyy_patient) and p.to_uid in (select code from wlyy.wlyy_doctor)) p " +
|
|
|
"or (p.from_uid in (select code from wlyy.wlyy_doctor) and p.to_uid in (select code from wlyy.wlyy_patient)))";
|
|
|
|
|
|
|
|
|
// 选择出所有的咨询组成员
|
|
|
sql = "select g.to_gid, g.from_uid from im_new.msg_group g where length(g.to_gid) > 20 group by g.to_gid order by g.to_gid";
|
|
@ -113,78 +116,78 @@ class Migration {
|
|
|
static migrateP2P() {
|
|
|
let data = "-- P2P sessions: \n";
|
|
|
async.waterfall([
|
|
|
function (callback) {
|
|
|
// 所有的P2P 会话,成员与消息
|
|
|
let sql = "SELECT a.from_uid sender_id, d.name sender_name, a.to_uid to_id, e.name to_name, a.type content_type, a.content, a.timestamp " +
|
|
|
" FROM im_new.msg_p2p a " +
|
|
|
" LEFT JOIN wlyy.wlyy_doctor d ON a.from_uid = d.code " +
|
|
|
" LEFT JOIN wlyy.wlyy_doctor e on a.to_uid = e.code " +
|
|
|
" WHERE a.from_uid IN (SELECT code FROM wlyy.wlyy_doctor d) AND a.to_uid IN (SELECT code FROM wlyy.wlyy_doctor d)";
|
|
|
|
|
|
ImDb.execQuery({
|
|
|
sql: sql,
|
|
|
args: [],
|
|
|
handler: function (err, res) {
|
|
|
if(err) return callback(err, null);
|
|
|
|
|
|
let sessionsBuffer = "insert into sessions(id, name, type, create_date) values ";
|
|
|
let participantBuffer = "insert into participants(session_id, participant_id, participant_role, last_fetch_time) values ";
|
|
|
let messageBuffer = "insert into p2p_messages(id, session_id, sender_id, sender_name, content_type, content, timestamp) values ";
|
|
|
res.forEach(function (message) {
|
|
|
let sessionId = DbUtil.stringArrayHash([message.sender_id, message.to_id]);
|
|
|
|
|
|
// 会话
|
|
|
sessionsBuffer += vprintf("\n('%s', '%s', %s, %s),", [
|
|
|
sessionId,
|
|
|
'P2P',
|
|
|
1,
|
|
|
new Date('2016-11-22 12:00:00').getTime()
|
|
|
]);
|
|
|
|
|
|
// 成员
|
|
|
participantBuffer += vprintf("\n('%s', '%s', %s, %s),", [
|
|
|
sessionId,
|
|
|
message.sender_id,
|
|
|
0,
|
|
|
new Date().getTime()
|
|
|
]);
|
|
|
|
|
|
participantBuffer += vprintf("\n('%s', '%s', %s, %s),", [
|
|
|
sessionId,
|
|
|
message.to_id,
|
|
|
0,
|
|
|
new Date().getTime()
|
|
|
]);
|
|
|
|
|
|
// 消息
|
|
|
messageBuffer += vprintf("\n('%s', '%s', '%s', '%s', '%s', '%s', %s),", [
|
|
|
mongoose.Types.ObjectId().toString(),
|
|
|
sessionId,
|
|
|
message.sender_id,
|
|
|
message.sender_name,
|
|
|
message.content_type,
|
|
|
message.content.replace(/'/g, "''"),
|
|
|
ObjectUtil.timestampToLong(message.timestamp)
|
|
|
]);
|
|
|
});
|
|
|
|
|
|
data += sessionsBuffer.substr(0, sessionsBuffer.length - 1) + " ON DUPLICATE KEY UPDATE id = id;\n\n";
|
|
|
data += participantBuffer.substr(0, participantBuffer.length - 1) + " ON DUPLICATE KEY UPDATE session_id = session_id;\n\n";
|
|
|
data += messageBuffer.substr(0, messageBuffer.length - 1) + " ON DUPLICATE KEY UPDATE id = id;\n\n";
|
|
|
callback(null);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
],
|
|
|
function (err, res) {
|
|
|
if (err) {
|
|
|
log.error("Error occurs while migrate p2p sessions: ", err);
|
|
|
} else {
|
|
|
fs.writeFileSync(MIGRATION_SCRIPT_File_NAME, data + "\n");
|
|
|
|
|
|
log.info("Migrate P2P sessions succeed.");
|
|
|
}
|
|
|
});
|
|
|
function (callback) {
|
|
|
// 所有的P2P 会话,成员与消息
|
|
|
let sql = "SELECT a.from_uid sender_id, d.name sender_name, a.to_uid to_id, e.name to_name, a.type content_type, a.content, a.timestamp " +
|
|
|
" FROM im_new.msg_p2p a " +
|
|
|
" LEFT JOIN wlyy.wlyy_doctor d ON a.from_uid = d.code " +
|
|
|
" LEFT JOIN wlyy.wlyy_doctor e on a.to_uid = e.code " +
|
|
|
" WHERE a.from_uid IN (SELECT code FROM wlyy.wlyy_doctor d) AND a.to_uid IN (SELECT code FROM wlyy.wlyy_doctor d)";
|
|
|
|
|
|
ImDb.execQuery({
|
|
|
sql: sql,
|
|
|
args: [],
|
|
|
handler: function (err, res) {
|
|
|
if (err) return callback(err, null);
|
|
|
|
|
|
let sessionsBuffer = "insert into sessions(id, name, type, create_date) values ";
|
|
|
let participantBuffer = "insert into participants(session_id, participant_id, participant_role, last_fetch_time) values ";
|
|
|
let messageBuffer = "insert into p2p_messages(id, session_id, sender_id, sender_name, content_type, content, timestamp) values ";
|
|
|
res.forEach(function (message) {
|
|
|
let sessionId = DbUtil.stringArrayHash([message.sender_id, message.to_id]);
|
|
|
|
|
|
// 会话
|
|
|
sessionsBuffer += vprintf("\n('%s', '%s', %s, %s),", [
|
|
|
sessionId,
|
|
|
'P2P',
|
|
|
1,
|
|
|
new Date('2016-11-22 12:00:00').getTime()
|
|
|
]);
|
|
|
|
|
|
// 成员
|
|
|
participantBuffer += vprintf("\n('%s', '%s', %s, %s),", [
|
|
|
sessionId,
|
|
|
message.sender_id,
|
|
|
0,
|
|
|
new Date().getTime()
|
|
|
]);
|
|
|
|
|
|
participantBuffer += vprintf("\n('%s', '%s', %s, %s),", [
|
|
|
sessionId,
|
|
|
message.to_id,
|
|
|
0,
|
|
|
new Date().getTime()
|
|
|
]);
|
|
|
|
|
|
// 消息
|
|
|
messageBuffer += vprintf("\n('%s', '%s', '%s', '%s', '%s', '%s', %s),", [
|
|
|
mongoose.Types.ObjectId().toString(),
|
|
|
sessionId,
|
|
|
message.sender_id,
|
|
|
message.sender_name,
|
|
|
message.content_type,
|
|
|
message.content.replace(/'/g, "''"),
|
|
|
ObjectUtil.timestampToLong(message.timestamp)
|
|
|
]);
|
|
|
});
|
|
|
|
|
|
data += sessionsBuffer.substr(0, sessionsBuffer.length - 1) + " ON DUPLICATE KEY UPDATE id = id;\n\n";
|
|
|
data += participantBuffer.substr(0, participantBuffer.length - 1) + " ON DUPLICATE KEY UPDATE session_id = session_id;\n\n";
|
|
|
data += messageBuffer.substr(0, messageBuffer.length - 1) + " ON DUPLICATE KEY UPDATE id = id;\n\n";
|
|
|
callback(null);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
],
|
|
|
function (err, res) {
|
|
|
if (err) {
|
|
|
log.error("Error occurs while migrate p2p sessions: ", err);
|
|
|
} else {
|
|
|
fs.writeFileSync(MIGRATION_SCRIPT_File_NAME, data + "\n");
|
|
|
|
|
|
log.info("Migrate P2P sessions succeed.");
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|