소스 검색

提交数据迁移代码

Sand 8 년 전
부모
커밋
cdf8e5821a
1개의 변경된 파일76개의 추가작업 그리고 73개의 파일을 삭제
  1. 76 73
      src/server/models/migration/migration.js

+ 76 - 73
src/server/models/migration/migration.js

@ -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.");
                }
            });
    }
    /**