Commit b3ee42cc authored by strong's avatar strong

Merge commit 'd687e750' into SANDBOX

# Conflicts:
#	app/models/forumUser.js
parents 1953d4e0 d687e750
'use strict';
var express = require('express'),
router = express.Router(),
returnCode = require('../../utils/returnCode'),
then = require('thenjs'),
async = require('async'),
_ = require('lodash');
var mongoose = require('mongoose');
var ForumMessage = mongoose.model('ForumMessage');
var forumMessageService=require('../../service/forumMessageService');
var forumUserService=require('../../service/forumUserService');
module.exports = function(app) {
app.use('/admin/forum', router);
};
//新增
router.post('/message/create', function(req, res, next) {
var object = req.body;
var ent_code = req.session.user.ent_code;
var uid = req.session.user.uid;
object.ent_code = ent_code;
var to_user_ids = object.to; //接受者ID
if(to_user_ids){
async.waterfall([
function(callback) { //获取管理员信息
forumUserService.getUserByUid(uid, function(err, user){
if(err){
callback(err,null);
}else if(user){
callback(null,user._id);
}else{
callback('管理员信息错误',null);
}
});
},
function(userID, callback) { //创建消息
object.from = userID;
forumMessageService.create(object,function(err,doc){
if (doc) {
callback(null, doc._id);
} else {
callback(null, null);
}
});
},
function(message_id, callback) { //更新用户消息
var obj_msg = {
msg:message_id,
status:0
}
var entity = {
$push:{messages:obj_msg}
}
var update_tasks = [];
_.forEach(to_user_ids, function(id) {
update_tasks.push(function(cont) {
var match = {
ent_code:object.ent_code,
_id: id
}
forumUserService.updateUserById(match, entity,function(err,doc){
if (err) {
cont(err, null);
} else {
cont(null, doc);
}
});
});
});
then.parallel(update_tasks).then(function(cont, datas) {
callback(null, null);
}).fail(function(err, cont) {
callback(err, null);
});
}
], function(err, result) {
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
res.json(returnCode.SUCCESS);
}
});
}else{
res.json(returnCode.WRONG_PARAM);
}
});
//获取
router.get('/message/:id/get', function(req, res, next) {
var id = req.params.id || null;
var rs = {};
if (id) {
forumMessageService.getById(id,function(err,entity){
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
rs.data = entity;
res.json(_.assign(rs, returnCode.SUCCESS));
}
});
} else {
res.json(returnCode.WRONG_PARAM);
}
});
//删除
router.post('/message/:id/delete', function(req, res, next) {
var msgID=req.params.id;
var ent_code = req.session.user.ent_code;
if(msgID){
async.waterfall([
function(callback) {
//获取用户IDs
var q = {
ent_code: ent_code,
_id:msgID
}
forumMessageService.getMessageToNotPage(q, function(err, result) {
if (err) {
callback(err, null);
} else {
callback(null, result);
}
});
},
function(userIDs, callback) { //更新用户消息
var entity = { $pull: { 'messages': { msg: msgID } } }
var pull_tasks = [];
_.forEach(userIDs, function(id) {
pull_tasks.push(function(cont) {
var match = {
ent_code:ent_code,
_id: id
}
forumUserService.updateUserById(match, entity,function(err,doc){
if (err) {
cont(err, null);
} else {
cont(null, doc);
}
});
});
});
then.parallel(pull_tasks).then(function(cont, datas) {
callback(null, null);
}).fail(function(err, cont) {
callback(err, null);
});
},
function(message_id, callback) { //删除消息
forumMessageService.deleteById(msgID,function(err,entity){
if (err) {
console.error(err);
callback(err, null);
} else {
callback(null, null);
}
});
}
], function(err, result) {
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
res.json(returnCode.SUCCESS);
}
});
}else{
res.json(returnCode.WRONG_PARAM);
}
});
//更新
router.post('/message/:id/update', function(req, res, next) {
var id=req.params.id;
var entity = req.body;
if(id && entity){
forumMessageService.update({_id:id},entity,function(err,entity){
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
res.json(returnCode.SUCCESS);
}
});
}else{
res.json(returnCode.WRONG_PARAM);
}
});
//查询列表
router.get('/message/searchList', function(req, res, next) {
var pageNo = req.query.pageNo || 1,
pageSize = req.query.pageSize || 10,
ent_code = req.session.user.ent_code,
status = req.query.status || null;
//查询用户条件
var q = {
ent_code: ent_code
}
if(status){
q.status = Number(status);
}
forumMessageService.getAll(q, pageNo, pageSize, function(err, result) {
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
res.json(_.assign(result, returnCode.SUCCESS));
}
});
});
//获取消息的用户列表
router.get('/message/:id/userList', function(req, res, next) {
var pageNo = req.query.pageNo || 1,
pageSize = req.query.pageSize || 10,
id = req.params.id,
ent_code = req.session.user.ent_code;
if(id){
//查询用户条件
var q = {
ent_code: ent_code,
_id:id
}
forumMessageService.getMessageTo(q, pageNo, pageSize, function(err, result) {
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
res.json(_.assign(result, returnCode.SUCCESS));
}
});
}else{
res.json(returnCode.WRONG_PARAM);
}
});
\ No newline at end of file
'use strict';
var express = require('express'),
router = express.Router(),
returnCode = require('../../utils/returnCode'),
moment = require('moment'),
_ = require('lodash'),
then = require('thenjs');
var forumUserService=require('../../service/forumUserService');
var forumMessageService=require('../../service/forumMessageService');
var async=require('async');
var user=require('../../utils/user');
module.exports = function(app) {
app.use('/v1/forum', router);
};
//分页用户查询消息
router.get('/message/searchMesage', function(req, res, next) {
//参数
var pageNo = req.query.pageNo || 1,
pageSize = req.query.pageSize || 10,
from = user.getMobileUser(req),
ent_code = req.session.user.ent_code;
async.waterfall([
function(callback) { //获取消息列表
var q = {
ent_code: ent_code,
_id:from
}
var status = 2; //过滤的状态,2 用户自己屏蔽的消息
forumMessageService.getMessages(q, status, pageNo, pageSize, function(err, total, messages){
if(err){
callback(err,null,null);
}else{
callback(null,total,messages);
}
});
},
function(total, messages, callback) {
var getMessage_tasks = [];
_.forEach(messages, function(message, key) {
getMessage_tasks.push(function(cont) {
forumMessageService.getByIdWithSelect(message.msg,function(err,doc){
if (err) {
cont(err, null);
} else {
if (messages[key].toObject) {
messages[key] = messages[key].toObject();
}
messages[key].msg = doc;
cont(null, null);
}
});
});
});
then.parallel(getMessage_tasks).then(function(cont, datas) {
callback(null, total, messages);
}).fail(function(err, cont) {
callback(err, null, null);
});
}
], function(err, total, result) {
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
var obj = {};
obj.total = total;
obj.pageNo = pageNo;
obj.pageSize = pageSize;
obj.items = result;
res.json(_.assign(obj, returnCode.SUCCESS));
}
});
});
//读取单条消息
router.get('/message/:mid/get', function(req, res, next) {
//消息参数
var mid = req.params.mid || null;
var userID = user.getMobileUser(req);
if(mid){
var condition = {
_id: mid
}
async.parallel([
function(cb) {
//获取消息
forumMessageService.getByIdWithSelect(condition, function(err, result) {
if (err) {
console.error(err);
cb(err, null);
} else {
cb(null, result);
}
});
},
function(cb) {
//更新用户的消息状态为未读
forumMessageService.updateUserMessageStatus({_id:userID}, mid, 1, function(err, result) {
if (err) {
console.error(err);
cb(err, null);
} else {
cb(null, result);
}
});
}
], function(err, results) {
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
res.json(_.assign(results[0], returnCode.SUCCESS));
}
});
}else{
res.json(returnCode.WRONG_PARAM);
}
});
//读取用户未读消息
router.get('/message/unReadMsg', function(req, res, next) {
//消息参数
var userID = user.getMobileUser(req);
if(userID){
var condition = {
_id: userID
}
forumMessageService.countUnReadMessage(condition, function(err, result) {
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
var rs = {
data:result
}
res.json(_.assign(rs, returnCode.SUCCESS));
}
});
}else{
res.json(returnCode.WRONG_PARAM);
}
});
//用户把消息改成删除(修改状态)
router.post('/message/:mid/unShowMsg', function(req, res, next) {
//消息参数
var mid = req.params.mid || null;
var userID = user.getMobileUser(req);
if(mid && userID){
//更新用户的消息状态为未读
forumMessageService.updateUserMessageStatus({_id:userID}, mid, 2, function(err, result) {
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
res.json(returnCode.SUCCESS);
}
});
}else{
res.json(returnCode.WRONG_PARAM);
}
});
\ No newline at end of file
'use strict';
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
//消息
var ForumMessageSchema = new Schema({
ent_code: {
type: Number,
require: true,
index: true
},
from: { //发消息者
type: Schema.Types.ObjectId,
require: true,
index: true,
ref: 'ForumUser'
},
to: [{ //收消息者
type: Schema.Types.ObjectId,
require: true,
index: true,
ref: 'ForumUser'
}],
title: { //标题
type: String,
require: true
},
type:{//类型
type: Number,
require: false
},
content: { //话题内容
type: String
},
status: { //状态,0显示,1屏蔽
type: Number,
require: true,
default: 0
},
created: {
type: Date,
required: true,
default:Date.now
}
}, {
'collection': 'pisns_forum_message'
});
module.exports = mongoose.model('ForumMessage', ForumMessageSchema);
\ No newline at end of file
......@@ -2,6 +2,20 @@
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
//消息封装
var subMsgSchema = mongoose.Schema({
msg : { //消息
type: Schema.Types.ObjectId,
ref: 'ForumMessage'
},
status: { //状态,0未读,1已读, 2用户屏蔽
type: Number,
require: true,
default: 0
}
},{ _id : true });
//论坛用户
var ForumUserSchema = new Schema({
ent_code: {
......@@ -72,6 +86,7 @@ var ForumUserSchema = new Schema({
type: Schema.Types.ObjectId,
ref: 'ForumThread'
}],
messages: [subMsgSchema],
created: {
type: Date,
required: true,
......
'use strict';
var mongoose = require('mongoose');
var ForumMessage = mongoose.model('ForumMessage');
var ForumUser = mongoose.model('ForumUser');
var _ = require('lodash');
//创建
exports.create=function(entity,callback){
var forum = new ForumMessage(entity);
forum.save(function(err, doc) {
if (err) {
console.error(err);
callback(err,null);
} else {
callback(null,doc);
}
});
};
//根据ID获取
exports.getById=function(tid,callback){
ForumMessage.findById(tid, function(err, doc) {
if (err) {
console.error(err);
callback(err,null);
} else {
callback(null,doc);
}
});
};
//根据条件更新
exports.update=function(condition,entity,callback){
ForumMessage.update(condition, entity,null,function(err,result){
if (err) {
console.error(err);
callback(err,null);
} else {
callback(null,null);
}
});
};
//根据ID删除标签
exports.deleteById=function(tid,callback){
ForumMessage.remove({ _id: tid},function(err,result){
if (err) {
console.error(err);
callback(err,null);
} else {
callback(null,null);
}
});
};
//获取消息and更新状态为已读
exports.findOneAndUpdate=function(condition,entity,callback){
ForumMessage.findOneAndUpdate(condition, entity,null,function(err,result){
if (err) {
console.error(err);
callback(err,null);
} else {
callback(null,result);
}
});
};
//获取数量
function countAll(conditions,callback) {
ForumMessage.count(conditions, function (err, count) {
if(err){
console.error(err);
callback(err,null);
}else{
callback(null,count);
}
});
}
//分页查询
exports.getAll= function(conditions,pageNo,pageSize,callback) {
countAll(conditions,function(err,count){
if(err){
console.error(err);
callback(err,null);
}else{
var skip = (pageNo - 1) * pageSize;
var limit = count - skip > pageSize ? pageSize : (count - skip);
ForumMessage.find(conditions).skip(skip).limit(limit).sort({created:-1}).exec(function(err, docs) {
if (err) {
console.error(err);
callback(err,null);
} else {
var obj={};
obj.total=count;
obj.pageNo=pageNo;
obj.pageSize=pageSize;
obj.items=docs;
callback(null,obj);
}
});
}
});
};
//获取数量
function countTo(conditions,callback) {
ForumMessage.findOne(conditions).select('to').exec(function(err, doc) {
if (err) {
console.error(err);
callback(err,0);
} else {
var count = doc? doc.to.length:0;
callback(null,count);
}
});
}
//分页查询
exports.getMessageTo= function(conditions,pageNo,pageSize,callback) {
countTo(conditions,function(err,count){
if(err){
console.error(err);
callback(err,null);
}else{
var skip = (pageNo - 1) * pageSize;
var limit = count - skip > pageSize ? pageSize : (count - skip);
ForumMessage.findOne(conditions).populate({
path: 'to',
options: {
skip:skip,
limit: limit,
sort: {created: -1}
}
}).select('to').exec(function(err, docs) {
if (err) {
console.error(err);
callback(err,null);
} else {
var obj={};
obj.total=count;
obj.pageNo=pageNo;
obj.pageSize=pageSize;
obj.items=docs.to;
callback(null,obj);
}
});
}
});
};
//不分页查询To
exports.getMessageToNotPage= function(conditions,callback) {
ForumMessage.findOne(conditions).select('to').exec(function(err, docs) {
if (err) {
console.error(err);
callback(err,null);
} else {
callback(null,docs.to);
}
});
};
//-----------------------------前端 start-------------------------//
//获取用户的消息(不联查消息实体)
function getUserMessages(conditions,callback) {
ForumUser.findOne(conditions).select('messages').exec(function(err, doc) {
if (err) {
console.error(err);
callback(err,null);
} else {
callback(null,doc.messages);
}
});
}
//获取消息数组
exports.getMessages= function(conditions, status, pageNo, pageSize, callback) {
ForumUser.findOne(conditions).select('messages').exec(function(err, docs) {
if (err) {
console.error(err);
callback(err,null,null);
} else {
var messages = [];
for (var i = docs.messages.length - 1; i >= 0; i--) {
if(docs.messages[i].status != status){
messages.push(docs.messages[i]);
}
};
var total = messages.length;
var skip = (pageNo - 1) * pageSize;
var limit = total - skip > pageSize ? pageSize : (total - skip);
//获取分页后的数组
messages = messages.slice(skip,limit);
callback(null,total,messages);
}
});
};
//更新用户消息状态为已读
exports.updateUserMessageStatus= function(condition,msgID, status,callback) {
getUserMessages(condition,function(err,docs){
if(err){
console.error(err);
callback(err,null);
}else{
for(var i in docs){
if (docs[i].msg == msgID) {
if (docs[i].toObject) {
docs[i] = docs[i].toObject();
}
docs[i].status = status;
break;
}
}
//更新用户
ForumUser.update(condition, {messages:docs},null,function(err,result){
if (err) {
console.error(err);
callback(err,null);
} else {
callback(null,null);
}
});
}
});
};
//前端根据ID获取
exports.getByIdWithSelect=function(mid,callback){
ForumMessage.findOne({_id:mid}).select('_id from title content created status').exec(function(err, doc) {
if (err) {
console.error(err);
callback(err,null);
} else {
callback(null,doc);
}
});
};
//获取未读消息数量
exports.countUnReadMessage= function(conditions,callback) {
ForumUser.findOne(conditions).populate({
path: 'messages.msg',
match: {'status':0},
select: 'status'
}).select('messages').exec(function(err, doc) {
if (err) {
console.error(err);
callback(err,0);
} else {
var count = 0;
_.forEach(doc.messages, function(msg, key) {
if(msg.msg && msg.status == 0){
count++;
}
});
callback(null,count);
}
});
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment