Переглянути джерело

Merge branch 'feature-refactor' of http://192.168.1.220:10080/Amoy/im.doctor into feature-refactor

8 роки тому
батько
коміт
11ab7a3be4

+ 3 - 0
src/server/models/client/app.client.js

@ -89,6 +89,7 @@ class AppClient extends RedisModel {
    /**
     * 向App端推送消息。
     *
     * @param targetId
     * @param message
     * @param sessionType
     */
@ -116,6 +117,8 @@ class AppClient extends RedisModel {
                pusher.pushToSingleViaAPN(tipMessage, customData,message.contentType, userStatus.token, function (err, res) {
                    if (err) {
                        ModelUtil.logError("Send notification via APN failed", err);
                    } else {
                        log.info("Send notification via APN succeed: ", JSON.stringify(res));
                    }
                });
            } else if (userStatus.platform == PLATFORMS.Android) {

+ 92 - 0
src/server/models/migration/migration.js

@ -0,0 +1,92 @@
/**
 * 群组,即原先的行政团队数据迁移。
 *
 * @author sand
 * @since 2017/1/9
 */
let ImDb = require('../../repository/mysql/db/im.db');
let async = require("async");
let log = require("../../util/log.js");
let fs = require('fs');
let migrationFile = "migration.sql";
class Migration {
    constructor() {
    }
    /**
     * 迁移P2P及其消息
     */
    static migrateP2P() {
    }
    /**
     * 迁移团队及其消息
     */
    static migrateGroups() {
        // 选择出所有的行政组
        let sql = "select t.id session_id, t.name, 3 `type`, t.create_time 'create_date' " +
            "from im_new.msg_group g, wlyy.wlyy_admin_team t " +
            "where g.to_gid = t.id group by g.to_gid order by g.to_gid";
        async.waterfall([
            function (callback) {
                ImDb.execQuery({
                    sql: sql,
                    args: [],
                    handler: function (err, sessions) {
                        if(err){
                            throw err;
                        } else{
                            let sqls = "";
                            sessions.forEach(function (session) {
                                sqls += "insert into sessions(id, name) values()";
                            });
                            fs.appendFile(migrationFile, "Hey there!", function(err) {
                                if(err) {
                                    return console.log(err);
                                }
                                console.log("The file was saved!");
                            });
                            callback(null, sessions);
                        }
                    }
                })
            }
        ],
        function (err, res) {
            log.error("Error occures while migrate group sessions");
        });
        // 选择出所有的行政组成员
        sql = "select t.id session_id, m.id participant_id, 0 'participant_role', 0 'last_fetch_time' " +
            "from im_new.msg_group g, wlyy.wlyy_admin_team t, wlyy.wlyy_admin_team_member m " +
            "where g.to_gid = t.id and t.id = m.team_id group by g.to_gid order by g.to_gid";
        // 选择出所有的行政组消息
        sql = "select g.msg_id 'id', g.to_gid 'session_id', g.from_uid 'sender_id', 'sender_name' '', g.`type` 'content_type', g.content 'content', g.timestamp 'timestamp', g.at_uid 'at' " +
            "from im_new.msg_group g " +
            "where length(g.to_gid) < 20 order by g.to_gid";
    }
    /**
     * 迁移MUC及其消息
     */
    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";
        // 选择出所有的咨询组成员
        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";
        // 选择出所有的咨询组消息
        sql = "select g.to_gid, g.from_uid, g.msg_id, g.`type`, g.content, g.timestamp, g.at_uid from im_new.msg_group g where length(g.to_gid) > 20 order by g.to_gid";
    }
}
Migration.migrateGroups();

+ 5 - 0
src/server/resources/schema/ichat_1.2.8_table_schema.sql

@ -49,6 +49,7 @@ CREATE TABLE `system_messages`
	`content_type` INTEGER NOT NULL COMMENT '消息类型,1文本,2图片,3语音,4文章,5跳转,6咨询开始,7咨询结束',
	`content` VARCHAR(1024) COMMENT '消息内容',
	`timestamp` TIMESTAMP(0) COMMENT '发送时间',
	`business_type` INT COMMENT '业务类型,IM不处理,只做存储与转发',
	CONSTRAINT `PK_messages` PRIMARY KEY (`id`)
) COMMENT='P2P会话消息'
;
@ -107,6 +108,7 @@ CREATE TABLE `p2p_messages`
	`content_type` INTEGER NOT NULL COMMENT '消息类型,1文本,2图片,3语音,4文章,5跳转,6咨询开始,7咨询结束',
	`content` VARCHAR(1024) COMMENT '消息内容',
	`timestamp` TIMESTAMP(0) COMMENT '发送时间',
	`business_type` INT COMMENT '业务类型,IM不处理,只做存储与转发',
	CONSTRAINT `PK_messages` PRIMARY KEY (`id`)
) COMMENT='P2P会话消息'
;
@ -120,6 +122,8 @@ CREATE TABLE `group_messages`
	`content_type` INTEGER NOT NULL COMMENT '消息类型,1文本,2图片,3语音,4文章,5跳转,6咨询开始,7咨询结束',
	`content` VARCHAR(1024) COMMENT '消息内容',
	`timestamp` TIMESTAMP(0) COMMENT '发送时间',
	`business_type` INT COMMENT '业务类型,IM不处理,只做存储与转发',
	`at` VARCHAR(1024) COMMENT '发送时,at某人',
	CONSTRAINT `PK_messages` PRIMARY KEY (`id`)
) COMMENT='群会话消息'
;
@ -132,6 +136,7 @@ CREATE TABLE `muc_messages`
	`sender_name` VARCHAR(50),
	`content_type` INTEGER NOT NULL COMMENT '消息类型,1文本,2图片,3语音,4文章,5跳转,6咨询开始,7咨询结束',
	`content` VARCHAR(1024) COMMENT '消息内容',
	`business_type` INT COMMENT '业务类型,IM不处理,只做存储与转发',
	`timestamp` TIMESTAMP(0) COMMENT '发送时间',
	CONSTRAINT `PK_messages` PRIMARY KEY (`id`)
) COMMENT='MUC会话消息'

+ 23 - 15
src/server/resources/schema/temp.sql

@ -1,6 +1,6 @@
/* ---------------------------------------------------- */
/*  Generated by Enterprise Architect Version 12.0 		*/
/*  Created On : 06-Jan-2017 12:02:36 PM 				*/
/*  Created On : 10-Jan-2017 5:32:13 PM 				*/
/*  DBMS       : MySql 						*/
/* ---------------------------------------------------- */
@ -8,25 +8,33 @@ SET FOREIGN_KEY_CHECKS=0
/* Drop Tables */
DROP TABLE IF EXISTS `sessions` CASCADE
DROP TABLE IF EXISTS `muc_messages` CASCADE
;
/* Create Tables */
CREATE TABLE `sessions`
CREATE TABLE `muc_messages`
(
	`id` VARCHAR(50) NOT NULL COMMENT '会话标识。会话标识来源根据业务场景:1 医生间P2P会话使用随机生成的ID;2 医生间的群会话使用行政团队的ID;3 医生与患者间的咨询以患者的ID+当前咨询次数为ID',
	`name` VARCHAR(50) NOT NULL COMMENT '会话名称',
	`type` INTEGER NOT NULL COMMENT '会话类型,1表示MUC会话,2表示P2P,3表示群会话,4表示临时讨论组',
	`business_type` INT COMMENT '业务相关类型',
	`create_date` DATETIME(0) NOT NULL COMMENT '创建时间',
	`last_sender_id` VARCHAR(50) COMMENT '消息最后发送人ID',
	`last_sender_name` VARCHAR(50) COMMENT '消息最后发送人姓名',
	`last_content_type` VARCHAR(50) COMMENT '消息最后内容类型',
	`last_content` VARCHAR(1024) COMMENT '消息最后内容',
	`last_message_time` TIMESTAMP(0) COMMENT '消息最后时间',
	CONSTRAINT `PK_sessions` PRIMARY KEY (`id`)
) COMMENT='会话'
	`id` VARCHAR(32) NOT NULL COMMENT '消息ID',
	`session_id` VARCHAR(50) NOT NULL COMMENT '所属会话',
	`sender_id` VARCHAR(50) NOT NULL COMMENT '消息发送者',
	`sender_name` VARCHAR(50),
	`content_type` INTEGER NOT NULL COMMENT '消息类型,1文本,2图片,3语音,4文章,5跳转,6咨询开始,7咨询结束',
	`content` VARCHAR(1024) COMMENT '消息内容',
	`business_type` INT COMMENT '业务类型,IM不处理,只做存储与转发',
	`timestamp` TIMESTAMP(0) COMMENT '发送时间',
	CONSTRAINT `PK_messages` PRIMARY KEY (`id`)
) COMMENT='MUC会话消息'
;
/* Create Primary Keys, Indexes, Uniques, Checks */
ALTER TABLE `muc_messages` 
 ADD INDEX `IXFK_messages_participants` (`session_id` ASC,`sender_id` ASC)
;
ALTER TABLE `muc_messages` 
 ADD INDEX `IXFK_messages_sessions` (`session_id` ASC)
;
SET FOREIGN_KEY_CHECKS=1