浏览代码

Merge branch 'im-internet-hospital-oracle' of huangwenjie/im.doctor into im-internet-hospital-oracle

huangwenjie 5 年之前
父节点
当前提交
3d602440af

+ 14 - 1
src/server/models/sessions/sessions.js

@ -258,7 +258,7 @@ class Sessions extends RedisModel {
                        return;
                    })
                    let createDate = new Date();
                    self.saveSessionToMysql(sessionId, name, type, createDate, businessType, function (err, res) {
                    self.updateSessionToMySQL(sessionId, name, type, createDate, businessType, function (err, res) {
                        logger.info("update session status is true");
                    })
                } else {
@ -343,6 +343,19 @@ class Sessions extends RedisModel {
        SessionRepo.saveSession(sessionId, name, type, createDate, businessType, handler);
    }
    /**
     * 保存session。若会话重复创建,则更新会话名称。
     * @param sessionId
     * @param name
     * @param type
     * @param createDate
     * @param businessType
     * @param handler
     */
    updateSessionToMySQL(sessionId, name, type, createDate, businessType, handler){
        SessionRepo.updateSessionToMySQL(sessionId, name, type, createDate, businessType, handler);
    }
    /**
     * 获取某个用户的全部session列表
     * @param userId

+ 9 - 5
src/server/repository/oracle/participant.repo.js

@ -245,7 +245,7 @@ class ParticipantRepo {
     * @param handler
     */
    static existsParticipant(sessionId, userId, handler) {
        let sql = "SELECT CASE WHEN COUNT(*) > 0 THEN TRUE ELSE FALSE END EXIST FROM PARTICIPANTS W WHERE W.SESSION_ID =:SESSION_ID AND W.PARTICIPANT_ID = :PARTICIPANT_ID ";
        let sql = "SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END \"exist\" FROM PARTICIPANTS W WHERE W.SESSION_ID =:SESSION_ID AND W.PARTICIPANT_ID = :PARTICIPANT_ID ";
        log.info("用户是否在指定Session中:sql:" + sql);
        log.info("用户是否在指定Session中:args:" + [sessionId, userId]);
        oracledbUtil.query({
@ -263,22 +263,26 @@ class ParticipantRepo {
     * @param handler
     */
    static saveParticipantsToMysql(sessionId, users, handler) {
        let sql = "INSERT INTO " + DB_TABLES.Participants + " (SESSION_ID,PARTICIPANT_ID,PARTICIPANT_ROLE,LAST_FETCH_TIME) VALUES ";
        let sql = "INSERT ALL ";
        let args = [];
        let nowDate = new Date();
        log.info("saveParticipantsToMysql:[sql] = " + sql);
        log.info("saveParticipantsToMysql:[users.length] = " + users.length);
        for (let j in users) {
            let tokens = users[j].split(":");
            sql += "(:SESSION_ID,:PARTICIPANT_ID,:PARTICIPANT_ROLE,:LAST_FETCH_TIME)";
            sql += " INTO " + DB_TABLES.Participants + " (SESSION_ID,PARTICIPANT_ID,PARTICIPANT_ROLE,LAST_FETCH_TIME) VALUES  (:SESSION_ID,:PARTICIPANT_ID,:PARTICIPANT_ROLE,:LAST_FETCH_TIME)";
            args.push(sessionId);
            args.push(tokens[0]);
            args.push(tokens.length > 1 ? tokens[1] : '0');
            args.push(nowDate);
            if (j != users.length - 1) sql += ", ";
            if (j != users.length - 1) sql += "";
            log.info("saveParticipantsToMysql:[args] = " + args);
        }
        sql += " ON DUPLICATE KEY UPDATE PARTICIPANT_ROLE = VALUES(PARTICIPANT_ROLE)";
        sql += " SELECT 1 FROM DUAL";
        /**
         * to do 待改造
         */
        // sql += " ON DUPLICATE KEY UPDATE PARTICIPANT_ROLE = VALUES(PARTICIPANT_ROLE)";
        oracledbUtil.query({
            "sql": sql,
            "args": args,

+ 23 - 4
src/server/repository/oracle/session.repo.js

@ -3,7 +3,6 @@
 */
"use strict";
let ImDb = require('../oracle/db/im.db');
let log = require('../../util/log.js');
//oracle工具类
@ -352,11 +351,31 @@ class SessionRepo {
     * @param handler
     */
    static saveSession(sessionId, name, type, createDate, businessType, handler) {
        let sql = "INSERT INTO " + DB_TABLES.Sessions + " (ID, NAME, TYPE, CREATE_DATE,BUSINESS_TYPE) VALUES (:ID,:NAME,:TYPE,:CREATE_DATE,:BUSINESS_TYPE) " +
            "ON DUPLICATE KEY UPDATE NAME = :NAME,TYPE = :TYPE";
        let sql = "INSERT INTO " + DB_TABLES.Sessions + " (ID, NAME, TYPE, CREATE_DATE,BUSINESS_TYPE) VALUES (:ID,:NAME,:TYPE,:CREATE_DATE,:BUSINESS_TYPE) ";
        oracledbUtil.query({
            "sql": sql,
            "args": [sessionId, name, type, createDate, businessType, name,type],
            "args": [sessionId, name, type,createDate,businessType],
            "handler": handler || function (err, res) {
                if(err) log.error(err);
            }
        });
    }
    /**
     * 保存session。若会话重复创建,则更新会话名称。
     *
     * @param sessionId
     * @param name
     * @param type
     * @param createDate
     * @param businessType
     * @param handler
     */
    static updateSessionToMySQL(sessionId, name, type, createDate, businessType, handler) {
        let sql = "UPDATE " + DB_TABLES.Sessions + " SET NAME = :NAME , TYPE = :NAME, CREATE_DATE=:CREATE_DATE,businessType=:BUSINESS_TYPE, STATUS=0 WHERE ID=:ID ";
        oracledbUtil.query({
            "sql": sql,
            "args": [name, type,createDate,businessType,sessionId],
            "handler": handler || function (err, res) {
                if(err) log.error(err);
            }

文件差异内容过多而无法显示
+ 2 - 2
src/server/repository/oracle/topics.repo.js


+ 28 - 35
src/server/util/oracledb.util.js

@ -27,42 +27,35 @@ let query = function(options){
                return handler(err, null);
            }
            connection.execute(sql, args, function (err, result)
            {
                if (err) {
                    log.error(err.message)
                    log.error("Execute SQL failed: sql" + sql);
                    log.error("Execute SQL failed: args" + args);
            if(sql.indexOf("INSERT") >0 || sql.indexOf("UPDATE") >0){
                connection.execute(sql, args, {autoCommit:true},function (err, result)
                {
                    if (err) {
                        log.error(err.message)
                        log.error("Execute SQL failed: sql" + sql);
                        log.error("Execute SQL failed: args" + args);
                        doRelease(connection);
                        return handler(err, result);
                    }
                    console.log(result);
                    handler(null, result.rows);
                    doRelease(connection);
                });
            }else{
                connection.execute(sql, args, function (err, result)
                {
                    if (err) {
                        log.error(err.message)
                        log.error("Execute SQL failed: sql" + sql);
                        log.error("Execute SQL failed: args" + args);
                        doRelease(connection);
                        return handler(err, result);
                    }
                    console.log(result);
                    handler(null, result.rows);
                    doRelease(connection);
                    return handler(err, result);
                }
                // log.info(result.toString());
                // result.rows.map((v)=>
                // {
                //     return result.metaData.reduce((p, key, i)=>
                //     {
                //         p[key.name] = v[i];
                //         log.info("p[key.name]:"+p[key.name])
                //         log.info("v[i]:"+v[i])
                //         return p;
                //     }, {})
                // });
                console.log(result);
                // console.log("result.metaData:"+result.metaData.toString());
                // console.log("result.rows[0]:"+result.rows[0]);
                handler(null, result.rows);
                //
                // //console.log(result.metaData);
                // callback(result.rows.map((v)=>
                // {
                //     return result.metaData.reduce((p, key, i)=>
                //     {
                //         p[key.name] = v[i];
                //         return p;
                //     }, {})
                // }));
                doRelease(connection);
            });
                });
            }
        }
    );
}