Selaa lähdekoodia

oracle util 底层方法修改

huangwenjie 5 vuotta sitten
vanhempi
commit
e4c0a5dcb1

+ 24 - 22
src/server/repository/oracle/private.msg.repo.js

@ -5,6 +5,8 @@
var ImDb = require("../oracle/db/im.db.js");
let oracledbUtil = require('../../util/oracledb.util');
class PrivateMsgRepo {
    constructor() {
    }
@ -19,7 +21,7 @@ class PrivateMsgRepo {
     * @param handler
     */
    static save(to, from, type, content, handler) {
        ImDb.execQuery({
        oracledbUtil.query({
            "sql": "INSERT INTO MSG_P2P (TO_UID,FROM_UID,TYPE,CONTENT) VALUES (:TO_UID,:FROM_UID,:TYPE,:CONTENT)",
            "args": [to, from, type, content],
            "handler": handler
@ -27,8 +29,8 @@ class PrivateMsgRepo {
    };
    static findOneMessage(messageId, handler) {
        ImDb.execQuery({
            "sql": "SELECT MSG_ID, TO_UID, FROM_UID, TYPE, CONTENT, TIMESTAMP FROM MSG_P2P WHERE MSG_ID = ?",
        oracledbUtil.query({
            "sql": "SELECT MSG_ID, TO_UID, FROM_UID, TYPE, CONTENT, TIMESTAMP FROM MSG_P2P WHERE MSG_ID = :MSG_ID",
            "args": [messageId],
            "handler": handler
        });
@ -36,8 +38,8 @@ class PrivateMsgRepo {
    static findOnePatientMessage(messageId, handler) {
        ImDb.execQuery({
            "sql": "SELECT M.*,D.NAME,D.PHOTO FROM MSG_P2P M, WLYY.WLYY_DOCTOR D, WLYY.WLYY_PATIENT P WHERE M.FROM_UID = D. CODE AND M.TO_UID = P. CODE AND M.MSG_ID =?",
        oracledbUtil.query({
            "sql": "SELECT M.*,D.NAME,D.PHOTO FROM MSG_P2P M, WLYY.WLYY_DOCTOR D, WLYY.WLYY_PATIENT P WHERE M.FROM_UID = D. CODE AND M.TO_UID = P. CODE AND M.MSG_ID =:MSG_ID",
            "args": [messageId],
            "handler": handler
        });
@ -57,12 +59,12 @@ class PrivateMsgRepo {
     */
    static findAllMessages(to, from, contentType, start, end, count, closedInterval, handler) {
        var sql = "SELECT MSG_ID, TO_UID, FROM_UID, TYPE, CONTENT, TIMESTAMP FROM MSG_P2P " +
            "WHERE ((TO_UID=? AND FROM_UID=?) OR (TO_UID=? AND FROM_UID=?)) " +
            "   AND TYPE IN (" + contentType + ") AND MSG_ID BETWEEN ? AND ? ORDER BY MSG_ID DESC LIMIT ?";
            "WHERE ((TO_UID=:TO_UID AND FROM_UID=:FROM_UID) OR (TO_UID=:TO_UID AND FROM_UID=:FROM_UID)) " +
            "   AND TYPE IN (" + contentType + ") AND MSG_ID BETWEEN '"+closedInterval ? end : end + 1+"' AND '"+closedInterval ? start : start - 1+"' ORDER BY MSG_ID DESC ";
        ImDb.execQuery({
        oracledbUtil.query({
            "sql": sql,
            "args": [to, from, from, to, closedInterval ? end : end + 1, closedInterval ? start : start - 1, count],
            "args": [to, from, from, to],
            "handler": handler
        });
    };
@ -83,12 +85,12 @@ class PrivateMsgRepo {
        //    "(ms3.uid = ? AND ms3.peer_uid = d.code) GROUP BY d.code, d.name ORDER BY ms3.timestamp DESC";
        var sql = "SELECT D. CODE AS CODE, D. NAME AS NAME,  D.SEX, D.PHOTO, S.LAST_CONTENT_TYPE, S.LAST_CONTENT, S. TIMESTAMP AS TIMESTAMP, S.NEW_MSG_COUNT " +
            "FROM MSG_P2P P, WLYY.WLYY_DOCTOR D, MSG_STATISTIC S " +
            "WHERE (( P.FROM_UID = D. CODE AND P.TO_UID = ? ) OR ( P.TO_UID = D. CODE AND P.FROM_UID = ? )) " +
            "AND S.FROM_GID IS NULL AND S.UID = ? " +
            "WHERE (( P.FROM_UID = D. CODE AND P.TO_UID = :TO_UID ) OR ( P.TO_UID = D. CODE AND P.FROM_UID = :FROM_UID )) " +
            "AND S.FROM_GID IS NULL AND S.UID = :UID " +
            "AND S.PEER_UID = D. CODE " +
            "GROUP BY D. NAME, D. CODE, D.HOSPITAL_NAME, D.JOB_NAME, D.SEX, D.PHOTO ORDER BY P.MSG_ID DESC"
        ImDb.execQuery({
        oracledbUtil.query({
            "sql": sql,
            "args": [userId, userId, userId],
            "handler": handler
@ -108,17 +110,17 @@ class PrivateMsgRepo {
        //    "AND ((ms.from_uid = ? AND ms.uid = p.code) OR (ms.uid = ? AND ms.from_uid = p.code)) ORDER BY ms.timestamp";
        var sql = "SELECT P1. CODE AS CODE , P1. NAME AS NAME, P1.BIRTHDAY, P1.SEX, P1.PHOTO, W.LAST_CONTENT, W.LAST_CONTENT_TYPE, W. TIMESTAMP AS TIMESTAMP, W.NEW_MSG_COUNT " +
            "FROM MSG_P2P P, WLYY.WLYY_PATIENT P1, MSG_STATISTIC W " +
            "WHERE (( P.TO_UID = P1.`CODE` AND P.FROM_UID = ? ) OR ( P.FROM_UID = P1.`CODE` AND P.TO_UID = ? )) " +
            "AND W.LAST_CONTENT_TYPE IN (1, 2, 3, 5, 6) AND W.UID = ? AND W.PEER_UID = P1.`CODE` AND W.FROM_GID IS NULL " +
            "WHERE (( P.TO_UID = P1.`CODE` AND P.FROM_UID = :FROM_UID ) OR ( P.FROM_UID = P1.`CODE` AND P.TO_UID = :TO_UID )) " +
            "AND W.LAST_CONTENT_TYPE IN (1, 2, 3, 5, 6) AND W.UID = :UID AND W.PEER_UID = P1.`CODE` AND W.FROM_GID IS NULL " +
            "GROUP BY P1. CODE, P1. NAME, P1.BIRTHDAY, P1.SEX, P1.PHOTO " +
            "UNION ALL " +
            "SELECT P1. CODE AS CODE, P1. NAME AS NAME, P1.BIRTHDAY, P1.SEX, P1.PHOTO, W.LAST_CONTENT, T.TYPE, W. TIMESTAMP AS TIMESTAMP, W.NEW_MSG_COUNT " +
            "FROM MSG_P2P P, WLYY.WLYY_PATIENT P1, MSG_STATISTIC W, WLYY.WLYY_CONSULT_TEAM T " +
            "WHERE (( P.TO_UID = P1.`CODE` AND P.FROM_UID = ? ) OR ( P.FROM_UID = P1.`CODE` AND P.TO_UID = ? )) " +
            "WHERE (( P.TO_UID = P1.`CODE` AND P.FROM_UID = :FROM_UID ) OR ( P.FROM_UID = P1.`CODE` AND P.TO_UID = :TO_UID )) " +
            "AND W.LAST_CONTENT_TYPE = 7 AND T.TYPE = 6 " +
            "AND (( T.PATIENT = P.FROM_UID AND T.DOCTOR = P.TO_UID ) OR ( T.PATIENT = P.TO_UID AND T.DOCTOR = P.FROM_UID )) " +
            "AND W.UID = ? AND W.PEER_UID = P1.`CODE` AND W.FROM_GID IS NULL GROUP BY P1. CODE, P1. NAME, P1.BIRTHDAY, P1.SEX, P1.PHOTO;";
        ImDb.execQuery({
            "AND W.UID = :UID AND W.PEER_UID = P1.`CODE` AND W.FROM_GID IS NULL GROUP BY P1. CODE, P1. NAME, P1.BIRTHDAY, P1.SEX, P1.PHOTO;";
        oracledbUtil.query({
            "sql": sql,
            "args": [userId, userId, userId, userId, userId, userId],
            "handler": handler
@ -136,20 +138,20 @@ class PrivateMsgRepo {
     */
    static findUnread  (from, to, start, count, handler) {
        var sql = "SELECT MSG_ID, TO_UID, FROM_UID, TYPE, CONTENT, TIMESTAMP FROM MSG_P2P " +
            "WHERE FROM_UID = ? AND TO_UID = ? AND MSG_ID < ? ORDER BY TIMESTAMP DESC rownum <= ?";
            "WHERE FROM_UID = :FROM_UID AND TO_UID = :TO_UID AND MSG_ID < :MSG_ID ORDER BY TIMESTAMP DESC rownum <= "+count+" ";
        ImDb.execQuery({
        oracledbUtil.query({
            "sql": sql,
            "args": [from, to, start, count],
            "args": [from, to, start],
            "handler": handler
        });
    };
    static isCurrentSessionFinished(doctorId, patientId, handler) {
        var sql = "SELECT C.CONSULT CONSULT_ID, CASE WHEN C.END_MSG_ID IS NOT NULL THEN 1 ELSE 0 END FINISHED " +
            "FROM WLYY.WLYY_CONSULT_TEAM C WHERE C.DOCTOR=? AND C.PATIENT = ? ORDER BY ID DESC rownum = 1";
            "FROM WLYY.WLYY_CONSULT_TEAM C WHERE C.DOCTOR=:DOCTOR AND C.PATIENT = :PATIENT ORDER BY ID DESC rownum = 1";
        ImDb.execQuery({
        oracledbUtil.query({
            "sql": sql,
            "args": [doctorId, patientId],
            "handler": handler

+ 32 - 30
src/server/repository/oracle/search.repo.js

@ -7,6 +7,8 @@ let vsprintf = require("sprintf-js").vsprintf;
const DB_TABLES = require('../../include/commons').DB_TABLES;
let oracledbUtil = require('../../util/oracledb.util');
class SearchRepo {
    constructor() {
    }
@ -18,15 +20,15 @@ class SearchRepo {
     * @param handler
     */
    static findTopicEndedSessionIdList(userId, handler) {
        let sql = "SELECT S.ID " +
        let sql = "SELECT S.\"ID\" as \"id\" " +
            "FROM sessions s, topics t, participants p " +
            "FROM SESSIONS S, TOPICS T, PARTICIPANTS P  " +
            "WHERE p.participant_id = :participant_id AND p.session_id = s.id AND s.id = t.session_id AND t.end_message_id IS NOT NULL AND s.`type` IN (1,2,8) " +
            " UNION " +
            "SELECT S.ID " +
            "SELECT S.\"ID\" as \"id\" " +
            "FROM SESSIONS S, PARTICIPANTS P " +
            "WHERE P.PARTICIPANT_ID = ? AND P.SESSION_ID = S.ID AND S.`TYPE` IN (2, 3, 4)";
            "WHERE P.PARTICIPANT_ID = :PARTICIPANT_ID AND P.SESSION_ID = S.ID AND S.`TYPE` IN (2, 3, 4)";
        ImDb.execQuery({
        oracledbUtil.query({
            sql: sql,
            args: [userId, userId],
            handler: handler
@ -40,16 +42,16 @@ class SearchRepo {
     * @param handler
     */
    static findTopicActiveSessionIdList(userId, handler) {
        let sql = "SELECT S.ID " +
        let sql = "SELECT S.\"ID\" as \"id\" " +
            "FROM SESSIONS S, TOPICS T, PARTICIPANTS P " +
            "WHERE P.PARTICIPANT_ID = ? AND P.SESSION_ID = S.ID AND S.ID = T.SESSION_ID AND T.END_MESSAGE_ID IS NULL  AND S.`TYPE` IN (1,2,8) " +
            "WHERE P.PARTICIPANT_ID = :PARTICIPANT_ID AND P.SESSION_ID = S.ID AND S.ID = T.SESSION_ID AND T.END_MESSAGE_ID IS NULL  AND S.`TYPE` IN (1,2,8) " +
            " UNION " +
            "SELECT S.ID " +
            "SELECT S.\"ID\" as \"id\" " +
            "FROM SESSIONS S, PARTICIPANTS P " +
            "WHERE P.PARTICIPANT_ID = ? AND P.SESSION_ID = S.ID  AND S.`TYPE` IN (2,3,4)  AND S.ID NOT IN(" +
            " SELECT DISTINCT P1.SESSION_ID FROM  PARTICIPANTS P1 ,TOPICS T WHERE P1.PARTICIPANT_ID = ? AND  T.SESSION_ID = P1.SESSION_ID  " +
            "WHERE P.PARTICIPANT_ID = :PARTICIPANT_ID AND P.SESSION_ID = S.ID  AND S.`TYPE` IN (2,3,4)  AND S.ID NOT IN(" +
            " SELECT DISTINCT P1.SESSION_ID FROM  PARTICIPANTS P1 ,TOPICS T WHERE P1.PARTICIPANT_ID = :PARTICIPANT_ID AND  T.SESSION_ID = P1.SESSION_ID  " +
            ") ";
        ImDb.execQuery({
        oracledbUtil.query({
            sql: sql,
            args: [userId, userId,userId],
            handler: handler
@ -110,9 +112,9 @@ class SearchRepo {
     * @param handler
     */
    static searchUser(sessionIdList,userId, keyword, userTable, page, size, handler) {
        let sql = "SELECT*FROM ( SELECT DISTINCT rownum r,U.NAME USER_NAME,S.ID SESSION_ID, S.NAME SESSION_NAME, S.TYPE SESSION_TYPE, S.BUSINESS_TYPE, U.ID USER_ID,U.SEX, U.BIRTHDATE, U.AVATAR,U.IDCARD %S " +
        let sql = "SELECT*FROM ( SELECT DISTINCT rownum r,U.\"NAME\" AS \"user_name\",S.\"ID\" AS \"session_id\",S.\"NAME\" AS \"session_name\",S.\"TYPE\" AS \"session_type\",S.\"BUSINESS_TYPE\" AS \"business_type\",U.\"ID\" AS \"user_id\",U.\"SEX\" AS \"sex\",U.\"BIRTHDATE\" AS \"birthdate\",U.\"AVATAR\" AS \"avatar\",U.\"IDCARD\" AS \"idcard\" %s " +
            " FROM  PARTICIPANTS P, " + userTable +
            " U,SESSIONS S WHERE S.ID IN (?) AND S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = U.ID AND P.PARTICIPANT_ID<>? AND (U.NAME LIKE ? OR U.IDCARD LIKE ?) ";
            " U,SESSIONS S WHERE S.ID IN ('"+sessionIdList+"') AND S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = U.ID AND P.PARTICIPANT_ID<>:PARTICIPANT_ID AND (U.NAME LIKE :NAME OR U.IDCARD LIKE :IDCARD) ";
        if (userTable === DB_TABLES.Doctors) {
            sql += " AND S.TYPE = 2 AND S.BUSINESS_TYPE = 1 ";
@ -120,13 +122,13 @@ class SearchRepo {
            sql += " AND S.TYPE IN (1,2,8)  AND S.BUSINESS_TYPE = 2 ";
        }
        sql += " AND rownum<=?) WHERE r>=?";
        sql += " AND rownum<="+size+") WHERE r>="+page * size+" ";
        sql = vsprintf(sql, [userTable == DB_TABLES.Doctors ? ', HOSPITAL_NAME' : '']);
        keyword = '%' + keyword + '%';
        ImDb.execQuery({
        oracledbUtil.query({
            sql: sql,
            args: [sessionIdList,userId, keyword,keyword, size,page * size],
            args: [userId, keyword,keyword],
            handler: handler
        });
    }
@ -140,17 +142,17 @@ class SearchRepo {
        }
        let sqlTemp = "SELECT rownum r,* FROM(" +
            "SELECT S.ID, S.NAME, S.TYPE, S.CREATE_DATE, S.BUSINESS_TYPE,GROUP_CONCAT(U. NAME) AS PARTICIPANT_NAME " +
            "SELECT S.\"ID\" AS \"id\",S.\"NAME\" AS \"name\",S.\"TYPE\" AS \"type\",S.\"CREATE_DATE\" AS \"create_date\",S.\"BUSINESS_TYPE\" AS \"business_type\",GROUP_CONCAT(U.NAME) AS \"participant_name\" " +
            "FROM SESSIONS S,  DOCTORS U ,PARTICIPANTS P " +
            "WHERE S.ID IN (?) AND S.TYPE IN (3,4) AND S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = U.ID AND P.PARTICIPANT_ID<>? AND (U.NAME LIKE ? OR S.NAME LIKE ?) GROUP BY S.ID " +
            "WHERE S.ID IN ('"+sessionIdList+"') AND S.TYPE IN (3,4) AND S.ID = P.SESSION_ID AND P.PARTICIPANT_ID = U.ID AND P.PARTICIPANT_ID<>:PARTICIPANT_ID AND (U.NAME LIKE :NAME OR S.NAME LIKE :NAME) GROUP BY S.ID " +
            ") X ";
        let sql = "SELECT*FROM ( "+sqlTemp+" AND rownum<=?) WHERE r>=?"
        let sql = "SELECT*FROM ( "+sqlTemp+" AND rownum<="+size+") WHERE r>="+page * size+" "
        keyword = '%' + keyword + '%';
        ImDb.execQuery({
        oracledbUtil.query({
            sql: sql,
            args: [sessionIdList,userId, keyword,keyword, size,page * size],
            args: [userId, keyword,keyword],
            handler: handler
        });
    }
@ -160,24 +162,24 @@ class SearchRepo {
     */
    static searchMessages(sessionIdList,userId, keyword, page, size, handler) {
        let sqlTemp = "SELECT rownum r, * FROM(" +
            "SELECT S.ID SESSION_ID, S.NAME SESSION_NAME, S.TYPE SESSION_TYPE, S.BUSINESS_TYPE SESSION_BUSINESS_TYPE, M.ID MESSAGE_ID, M.SENDER_ID, M.SENDER_NAME, M.TIMESTAMP, M.CONTENT " +
            "SELECT S.\"ID\" AS \"session_id\",S.\"NAME\" AS \"session_name\",S.\"TYPE\" AS \"SESSION_TYPE\",S.\"BUSINESS_TYPE\" AS \"session_type\",M.\"ID\" AS \"message_id\",M.\"SENDER_ID\" AS \"sender_id\",M.\"SENDER_NAME\" AS \"sender_name\",M.\"TIMESTAMP\" AS \"timestamp\",M.\"CONTENT\" AS \"content\" " +
            "FROM SESSIONS S, MUC_MESSAGES M " +
            "WHERE S.ID IN (?) AND S.ID = M.SESSION_ID AND S.`TYPE` = 1 AND M.CONTENT_TYPE = 1 AND M.CONTENT LIKE ? " +
            "WHERE S.ID IN ('"+sessionIdList+"') AND S.ID = M.SESSION_ID AND S.`TYPE` = 1 AND M.CONTENT_TYPE = 1 AND M.CONTENT LIKE :CONTENT " +
            " UNION " +
            "SELECT S.ID SESSION_ID, S.NAME SESSION_NAME, S.TYPE SESSION_TYPE, S.BUSINESS_TYPE SESSION_BUSINESS_TYPE, M.ID MESSAGE_ID, M.SENDER_ID, M.SENDER_NAME, M.TIMESTAMP, M.CONTENT " +
            "SELECT S.\"ID\" AS \"session_id\",S.\"NAME\" AS \"session_name\",S.\"TYPE\" AS \"SESSION_TYPE\",S.\"BUSINESS_TYPE\" AS \"session_type\",M.\"ID\" AS \"message_id\",M.\"SENDER_ID\" AS \"sender_id\",M.\"SENDER_NAME\" AS \"sender_name\",M.\"TIMESTAMP\" AS \"timestamp\",M.\"CONTENT\" AS \"content\" " +
            "FROM SESSIONS S, P2P_MESSAGES M " +
            "WHERE S.ID IN (?) AND S.ID = M.SESSION_ID AND S.`TYPE` = 2 AND M.CONTENT_TYPE = 1 AND M.CONTENT LIKE ? " +
            "WHERE S.ID IN ('"+sessionIdList+"') AND S.ID = M.SESSION_ID AND S.`TYPE` = 2 AND M.CONTENT_TYPE = 1 AND M.CONTENT LIKE :CONTENT " +
            " UNION " +
            "SELECT S.ID SESSION_ID, S.NAME SESSION_NAME, S.TYPE SESSION_TYPE, S.BUSINESS_TYPE SESSION_BUSINESS_TYPE, M.ID MESSAGE_ID, M.SENDER_ID, M.SENDER_NAME, M.TIMESTAMP, M.CONTENT " +
            "SELECT S.\"ID\" AS \"session_id\",S.\"NAME\" AS \"session_name\",S.\"TYPE\" AS \"SESSION_TYPE\",S.\"BUSINESS_TYPE\" AS \"session_type\",M.\"ID\" AS \"message_id\",M.\"SENDER_ID\" AS \"sender_id\",M.\"SENDER_NAME\" AS \"sender_name\",M.\"TIMESTAMP\" AS \"timestamp\",M.\"CONTENT\" AS \"content\" " +
            "FROM SESSIONS S, GROUP_MESSAGES M " +
            "WHERE S.ID IN (?) AND S.ID = M.SESSION_ID AND S.`TYPE` IN (3,5) AND M.CONTENT_TYPE = 1 AND M.CONTENT LIKE ? ) X " +
            "WHERE S.ID IN ('"+sessionIdList+"') AND S.ID = M.SESSION_ID AND S.`TYPE` IN (3,5) AND M.CONTENT_TYPE = 1 AND M.CONTENT LIKE :CONTENT ) X " +
            "ORDER BY X.SESSION_ID, X.MESSAGE_ID ";
        let sql = "SELECT*FROM ( "+sqlTemp+" AND rownum<=?) WHERE r>=?"
        let sql = "SELECT*FROM ( "+sqlTemp+" AND rownum<="+ size+") WHERE r>="+page * size+" "
        keyword = '%' + keyword + '%';
        ImDb.execQuery({
        oracledbUtil.query({
            sql: sql,
            args: [sessionIdList, keyword, sessionIdList, keyword, sessionIdList, keyword,  size,page * size],
            args: [keyword, keyword, keyword],
            handler: handler
        });
    }

+ 5 - 2
src/server/repository/oracle/system.msg.repo.js

@ -3,12 +3,15 @@
var log = require('../../util/log');
var ImDb = require("../oracle/db/im.db.js");
//oracle工具类
let oracledbUtil = require('../../util/oracledb.util');
class SystemMsgRepo {
    constructor(){}
    static save(to, contentType, title, summary, content, handler) {
        ImDb.execQuery({
            "sql": "INSERT INTO MSG_SYSTEM (TO_UID,TYPE,TITLE,CONTENT,DATA) VALUES (?,?,?,?,?)",
        oracledbUtil.query({
            "sql": "INSERT INTO MSG_SYSTEM (TO_UID,TYPE,TITLE,CONTENT,DATA) VALUES (:TO_UID,:TYPE,:TITLE,:CONTENT,:DATA)",
            "args": [to, contentType, title, summary, content],
            "handler": handler
        });

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 92 - 76
src/server/repository/oracle/topics.repo.js