更新redis->mongo

This commit is contained in:
LittleBoy 2019-09-30 10:31:42 +08:00
parent 653870a991
commit 20eed6c531
7 changed files with 117 additions and 88 deletions

View File

@ -53,7 +53,24 @@ function ioServer(io) {
//获取管理员 socket
let kefuData =await sessoionModel.find(gongHao);
if(kefuData){ // 找到客服数据
let location = Common.getIpLocation(msg.ip);
let socket = socket.id;
let type = 'customer';
let kefu_id = gongHao;
let clientInfo = {
"uid": uid,
"name": location + ' 客户',
"type": 'online'
};
// 添加客户到 对应的客服
sessoionModel.create({
uid,
socket:socket.id,
type:'customer',
kefu_id:gongHao,
nickname:clientInfo.name,
})
// 给管理员发送通知
io.to(kefuData.socket).emit('update-users', info);
}
@ -61,74 +78,15 @@ function ioServer(io) {
//TODO 失败重发机制
console.log('给管理员发送通知失败');
}
// 给管理员发送通知
redis.get(AppConfig.KF_PREFIX + gongHao, function (err, sid) {
if (err) {
console.error(err);
}
console.log('sid=>', sid)
if (sid) {
redis.get('online_count', function (err, val) {
if (err) {
console.error(err);
}
if (!val) {
val = 0;
}
if (typeof val == 'string') {
val = parseInt(val);
}
//var ip = socket.request.connection.remoteAddress;
//此处获取IP可能会有延迟建议改成自己的IP库
Common.getIpLocation(msg.ip, function (err, location) {
if (err) {
location = '';
}
var info = {
"uid": uid,
"name": location + ' 客户',
"type": 'online'
};
//将用户添加到
console.log(info);
redis.get('user-uuids', function (err, uuids) {
if (err) {
console.error(err);
}
if (uuids) {
uuids = JSON.parse(uuids);
} else {
uuids = [];
}
if (__uuids.indexOf(uid) == -1) {
__uuids.push(uid);
var d_user = {"uid": uid, "name": location + ' 客户'};
uuids.push(d_user);
uuids = JSON.stringify(uuids);
redis.set('user-uuids', uuids, null, function (err, ret) {
if (err) {
console.error(err);
}
});
}
});
//让客服更新用户
io.to(sid).emit('update-users', info);
});
});
}
});
}
//将用户id和socket进行保定
redis.set(uid, socket.id, 3600 * 3, function (err, ret) {
if (err) {
console.error(err);
}
});
// redis.set(uid, socket.id, 3600 * 3, function (err, ret) {
// if (err) {
// console.error(err);
// }
// });
// redis.set(socket.id,uid,null,function (err,ret) {
// if(err){
@ -142,7 +100,7 @@ function ioServer(io) {
socket.on('disconnect', function () {
console.log("与服务其断开");
_self.updateOnlieCount(false);
_self.updateOnlineCount(false);
redis.get(socket.id, function (err, val) {
if (err) {
@ -250,7 +208,7 @@ function ioServer(io) {
});
});
this.updateOnlieCount = function (isConnect) {
this.updateOnlineCount = function (isConnect) {
//记录在线客户连接数
redis.get('online_count', function (err, val) {
if (err) {

View File

@ -12,7 +12,7 @@ var SessionSchema = new Schema({
// 客服编号
kefu_id: {type: String},
nickname: {type: String},
status: {type: Number},
status: {type: Number,default:1},
create_at: {type: Date, default: Date.now}
});

View File

@ -259,7 +259,7 @@ layui.use(['layer', 'form', 'jquery'], function () {
msg_notification(msg);
});
//后端推送来消息时
//后端推送来消息时,更新用户
socket.on('update-users', function (msg) {
if (msg.type == 'offline') {
//arrayRemove(uuids,msg.uid);

View File

@ -10,21 +10,13 @@ function getClientIp(req) {
req.connection.socket.remoteAddress;
};
function getIpLocation(ip, callback) {
return setTimeout(() => {
try {
function getIpLocation(ip) {
let data = qqwry.searchIP(ip)
if (!data) {
callback(new Error('get ip exception'), ip);
} else {
return ip;
}
let area = data.Area.trim().toLowerCase().replace('cz88.net', '');
callback(false, data.Country + ' ' + area);
}
} catch (e) {
callback(e, ip);
}
}, 10);
return data.Country + ' ' + area;
}
exports.getClientIp = getClientIp;

View File

@ -1,5 +1,5 @@
var mongoose = require("mongoose");
const DB_URL = 'mongodb://192.168.10.80:27017/kefu';
const DB_URL = 'mongodb://192.168.10.123:27017/kefu';
mongoose.connect(DB_URL);
/**

View File

@ -7,6 +7,8 @@
<title>Document</title>
</head>
<body>
<h1>Error</h1>
<h1><%= message %></h1>
<h2><%= error.status %></h2>
<pre><%= error.stack %></pre>
</body>
</html>

View File

@ -22,11 +22,14 @@
<div class="message-sender">
<div class="message-emoji-picture" id="btn-uploader">
<i id="emojiBtn" class="layui-icon" style="font-size: 25px; color: #969faa;">&#xe60c;</i>
<i id="pickfiles" class="layui-icon picture-upload" style="font-size: 25px; color: #969faa;margin-left: 10px;">&#xe64a;</i>
<i id="pickfiles" class="layui-icon picture-upload"
style="font-size: 25px; color: #969faa;margin-left: 10px;">&#xe64a;</i>
</div>
<div class="sender-editor">
<textarea placeholder="请输入消息内容Enter快捷发送Ctrl+Enter换行" id="msg-send-textarea" disabled></textarea>
<div class="layui-btn layui-btn-normal btnMsgSend layui-btn-disabled" title="Enter快捷发送Ctrl+Enter换行">发送</div>
<div class="layui-btn layui-btn-normal btnMsgSend layui-btn-disabled" title="Enter快捷发送Ctrl+Enter换行">
发送
</div>
</div>
</div>
<div class="emoji-list">
@ -43,6 +46,80 @@
<li title="表情8">&#x1F60A;</li>
<li title="表情9">&#x1F60B;</li>
<li title="表情10">&#x1F60C;</li>
<li>&#x1F60D;</li>
<li>&#x1F60E;</li>
<li>&#x1F60F;</li>
<li>
&#x1F610;
</li>
<li>
&#x1F611;
</li>
<li>
&#x1F612;
</li>
<li>&#x1F613;
</li>
<li>&#x1F614;
</li>
<li>&#x1F615;
</li>
<li>&#x1F616;
</li>
<li>&#x1F617;</li>
<li>
&#x1F618;
</li>
<li>&#x1F619;</li>
<li>
&#x1F61A;
</li>
<li>&#x1F61B;
</li>
<li>&#x1F61C;
</li>
<li>&#x1F61D;
</li>
<li>&#x1F61E;
</li>
<li>&#x1F61F;
</li>
<li>&#x1F620;
</li>
<li>&#x1F621;
</li>
<li>&#x1F622;
</li>
<li>&#x1F623;
</li>
<li>&#x1F624;
</li>
<li>&#x1F625;
</li>
<li>&#x1F626;
</li>
<li>&#x1F627;
</li>
<li>&#x1F628;
</li>
<li>&#x1F629;
</li>
<li>&#x1F62A;
</li>
<li>&#x1F62B;
</li>
<li>&#x1F62C;
</li>
<li>&#x1F62D;
</li>
<li>&#x1F62E;
</li>
<li>&#x1F62F;</li>
<li>&#x1F630;</li>
<li>&#x1F631;</li>
<li>&#x1F632;</li>
<li>&#x1F633;</li>
<li>&#x1F634;</li>
</ul>
</div>
</div>
@ -50,6 +127,6 @@
<script src="/layui/layui.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script type='text/javascript' src='js/common.js' charset='utf-8'></script>
<script src="/js/server/index.js"> </script>
<script src="/js/server/index.js"></script>
<% include footer.ejs %>