var express = require('express'); var router = express.Router(); var msg_group = require("../models/msg_group"); var msg_statistic = require("../models/msg_statistic"); var user = require("../models/user"); var push = require("../models/push_notify"); var http = require('http'); var qs = require('querystring'); var getui = require('getui'); /** * 群组消息:group/sendmsg.im?from_uid=x&to_gid=xx&content=xxx&type=1&at_uid=xxxx&group_type * 参数: * from_uid:发送者id * to_gid:群组id * content:消息内容 * type:消息类型:1文本,2图片,3语音 * at_uid:@用户id:1为行政组,null或者其他值为自定义组 * group_type:区分是行政组还是自定义组,从不同表中查找组成员 */ router.get('/sendmsg.im', function (req, res, next) { if (req.query.from_uid == null || req.query.to_gid == null || req.query.content == null || req.query.type == null) { res.send({errno: -1, errmsg: 'parameter error'}); return; } msg_group.isGroupUser(req.query.from_uid, req.query.to_gid, req.query.group_type, function (err, result) { if (err) { res.send({errno: 1, errmsg: 'get users from db error'}); return; } if (result.length == 0) { res.send({errno: 2, errmsg: 'no receive users'}); return; } var at_uid = ''; if (req.query.at_uid != null) { at_uid = req.query.at_uid; } // 保存群组消息 msg_group.saveGroupMsg(req.query.from_uid, req.query.to_gid, at_uid, req.query.type, req.query.content, function (err, result) { if (err) { res.send({errno: 3, errmsg: 'save msg to db error'}); return; } res.send({errno: 0, errmsg: 'send group msg success'}); // 统计信息 msg_statistic.updateGroupChatInfo(req.query.from_uid, req.query.to_gid, req.query.from_uid, 0, req.query.type, req.query.content, false, function (err, result) { if (err) { console.log(err); } }); // 推送通知消息给群组各成员 msg_group.getGroupUsers(req.query.to_gid, req.query.group_type, function (err, result) { if (err) { console.log('get users from db error'); return; } if (result.length == 0) { console.log('no receive users'); return; } // 推送通知 for (var nIndex = 0; nIndex < result.length; nIndex++) { if (result[nIndex].member_code == req.query.from_uid) { continue; } (function () { var toUserID = result[nIndex].member_code; user.getUserbyID(toUserID, function (err, result) { var tmp = toUserID; if (err) { console.log('group msg:get user by id from db failed'); return; } var title = ''; var content = ''; if (req.query.type == 1) { title = '群组消息'; content = req.query.content; } else if (req.query.type == 2) { title = '群组消息'; content = '接收到 [图片]'; } else if (req.query.type == 3) { title = '群组消息'; content = '接收到 [语音]'; } else { title = '群组消息'; content = '接收到一条新消息'; } var bMustPush = 0; var data; if (result.length > 0) { data = result[0]; if (data.is_online) { bMustPush = 1; } } var push_data = JSON.stringify({ type:'group_msg', gid:req.query.to_gid }); // 保存通知到数据库中 push.savePushNotify(toUserID, req.query.type, title, content, push_data, bMustPush, function (err, result) { if (err) { // 保存失败 console.log('save msg to db failed'); } else { console.log('save msg to db success'); if (bMustPush == true) { if (data.platform == 0) {// iOS getui.pushAPN(toUserID, data.token, req.query.type, title, content, push_data, function (err, result) { if (err != null) { console.log(err); } else { console.log(result); } }); } else {// Android getui.pushAndroid(data.client_id, req.query.type, title, content, push_data, data.status, function (err, result) { if (err != null) { console.log(err); } else { console.log(result); } }); } } } }); }); // 统计信息 var at_me = 0; if (at_uid == toUserID) { at_me = 1; } msg_statistic.updateGroupChatInfo(toUserID, req.query.to_gid, req.query.from_uid, at_me, req.query.type, req.query.content, true, function (err, result) { if (err) { console.log(err); } }); })(); } }); }); }); }); /** * 群组消息:group/getmsg.im?uid=x&gid=xx&start=0&count=20 * 参数: * uid:用户id * gid:群组id * start;分页查询起始条目 * count:查询条数 * 备注:按时间倒序 */ router.get('/getmsg.im', function (req, res, next) { if (req.query.uid == null || req.query.gid == null || req.query.start == null || req.query.count == null) { res.send({errno: -1, errmsg: 'parameter error'}); return; } msg_group.getGroupMsg(req.query.gid, req.query.start, req.query.count, function (err, result) { if (err) { res.send({errno: 1, errmsg: 'get group msg from db error'}); return; } var data = {}; data.start = parseInt(req.query.start); data.count = result.length; data.list = new Array(); for (var nIndex = 0; nIndex < result.length; nIndex++) { result[nIndex].timestamp = Date.parse(new Date(result[nIndex].timestamp)); data.list.push(result[nIndex]); } res.send(data); // 清空统计信息 msg_statistic.clearGroupChatInfo(req.query.uid, req.query.gid, function (err, result) { if (err) { console.log(err); } }); }); }); module.exports = router;