Commit 0189d7b3 authored by 陈家荣's avatar 陈家荣

Merge branch 'development' of git.wxpai.cn:scrmgroup/pisns-forum-api into development

Conflicts:
	app/controllers/admin/forumThread.js
	app/controllers/mobile/forumThread.js
parents 1bc91e62 f2a61e4b
'use strict';
var express = require('express'),
router = express.Router(),
returnCode = require('../../utils/returnCode'),
_ = require('lodash');
var ForumBlackListService=require('../../service/forumBlackListService');
var ForumUserService=require('../../service/forumUserService');
module.exports = function(app) {
app.use('/admin/forum', router);
};
//增加黑名单
router.post('/blacklist', function(req, res, next) {
var ent_code=req.session.user.ent_code;
ForumBlackListService.addBlack(req.body,ent_code,function(err,result){
if(err){
res.json(returnCode.BUSY);
}else{
res.json(_.assign(result, returnCode.SUCCESS));
}
});
});
//导入黑名单excel
router.post('/importExcelBlacklist', function(req, res, next) {
var blacks = req.body.blacks;
var ent_code=req.session.user.ent_code;
ForumBlackListService.addBlacks(blacks,ent_code,function(err,result){
if(err){
res.json(returnCode.BUSY);
}else{
res.json(_.assign(result, returnCode.SUCCESS));
}
});
});
//获取黑名单分页列表
router.get('/blacklist', function(req, res, next) {
var pageNo = req.query.pageNo || 1;
var pageSize = req.query.pageSize || 10;
var status=req.query.status;
var blackOpenId = req.query.blackOpenId;
var conditions={
ent_code:req.session.user.ent_code
};
if(status){
conditions.status = status;
}
if(blackOpenId){
conditions.blackOpenId = {
$regex: blackOpenId,
$options: 'i'
};
}
ForumBlackListService.getBlackPageList(conditions,pageNo,pageSize,function(err,results){
if(err){
console.error(err);
res.json(returnCode.BUSY);
}else{
res.json(_.assign(results, returnCode.SUCCESS));
}
});
});
//获取黑名单根据id
router.get('/blacklist/:id', function(req, res, next) {
var id = req.params.id;
ForumBlackListService.getBlackById(id,function(err,result){
if(err){
res.json(returnCode.BUSY);
}else{
res.json(_.assign(result, returnCode.SUCCESS));
}
});
});
//删除黑名单根据id
router.get('/blacklist/:id/del', function(req, res, next) {
var id = req.params.id;
ForumBlackListService.removeBlackById(id,function(err,result){
if(err){
res.json(returnCode.BUSY);
}else{
res.json(_.assign(result, returnCode.SUCCESS));
}
});
});
//更新
router.post('/blacklist/:id', function(req, res, next) {
var id = req.params.id;
ForumBlackListService.updateBlackById(id,req.body,function(err,result){
if(err){
res.json(returnCode.BUSY);
}else{
res.json(_.assign(result, returnCode.SUCCESS));
}
});
});
router.get('/userList', function(req, res, next) {
var obj={total:0};
obj.items=[];
ForumUserService.getUsers(req.query.pageNo,req.query.pageSize,
function(err,result){
if(err){
res.json(returnCode.BUSY);
}else{
obj.items = result.items;
obj.total = result.total;
res.json(_.assign(obj, returnCode.SUCCESS));
}
});
});
\ No newline at end of file
...@@ -7,6 +7,7 @@ var express = require('express'), ...@@ -7,6 +7,7 @@ var express = require('express'),
var mongoose = require('mongoose'); var mongoose = require('mongoose');
var forumUserService=require('../../service/forumUserService'); var forumUserService=require('../../service/forumUserService');
var forumThreadService=require('../../service/forumThreadService'); var forumThreadService=require('../../service/forumThreadService');
var httpService=require('../../service/httpService');
var async=require('async'); var async=require('async');
...@@ -52,3 +53,11 @@ router.post('/user/identifyUser',function(req,res,next){ ...@@ -52,3 +53,11 @@ router.post('/user/identifyUser',function(req,res,next){
res.json('success'); res.json('success');
} }
}); });
//微信分享带来用户
router.get('/user/from/share', function(req, res, next) {
var mid = req.query.mid,
action = req.query.action,
ent_code = req.query.ent_code;
httpService.sendRequest(ent_code,mid,action);
res.status(200).end();
});
\ No newline at end of file
'use strict';
var express = require('express'),
router = express.Router(),
returnCode = require('../../utils/returnCode'),
_ = require('lodash'),
then = require('thenjs'),
moment = require('moment'),
mongoose = require('mongoose');
//模型
var ForumPvLog = mongoose.model('ForumPVLog'),
ForumUvLog = mongoose.model('ForumUVLog'),
ForumThread = mongoose.model('ForumThread');
module.exports = function(app) {
app.use('/admin/forum', router);
};
//社区情况(首页)
router.get('/statistic',function(req, res, next) {
var yesterday = moment(new Date().getTime() - 24*3600*1000).format('YYYY-MM-DD'),
before_yesterday = moment(new Date().getTime() - 2*24*3600*1000).format('YYYY-MM-DD');
var y_begin = yesterday,
y_end = yesterday+' 23:59:59',
by_begin = before_yesterday,
by_end = before_yesterday+' 23:59:59';
var q = {ent_code:req.session.user.ent_code};
then.parallel([
function(cont){
//昨天访问用户
q.created = {$gte:y_begin,$lte:y_end};
ForumUvLog.count(q,cont);
},function(cont){
//前天访问用户
q.created = {$gte:by_begin,$lte:by_end};
ForumUvLog.count(q,cont);
},
function(cont){
//昨天发帖数
q.created = {$gte:y_begin,$lte:y_end};
ForumThread.count(q,cont);
},
function(cont){
//前天发帖数
q.created = {$gte:by_begin,$lte:by_end};
ForumThread.count(q,cont);
}
]).then(function(cont,datas){
var y_user = datas[0],
by_user = datas[1],
y_thread = datas[2],
by_thread = datas[3];
var user_rate = (by_user === 0)?y_user:(y_user/by_user).toFixed(4)-1,
thread_rate = (by_thread === 0)?y_thread:(y_thread/by_thread).toFixed(4)-1;
cont(null,y_user,user_rate,y_thread,thread_rate);
}).then(function(cont,y_user,user_rate,y_thread,thread_rate){
res.json({result:true,data:{
user:y_user,
user_rate:Math.round(user_rate>1?100:user_rate<0?0:user_rate*100),
thread:y_thread,
thread_rate:Math.round(thread_rate>1?100:thread_rate<0?0:thread_rate*100)
}})
}).fail(function(cont,err){
console.error(err);
res.json({result:false,err:err});
});
});
'use strict';
var express = require('express'),
router = express.Router(),
returnCode = require('../../utils/returnCode'),
_ = require('lodash');
var mongoose = require('mongoose');
//var forumThreadService = require('../../service/forumThreadService');
var forumShareConfigService = require('../../service/forumShareConfigService');
//var forumShareService = require('../../service/forumShareService');
//var config = require('../../../config/config');
var then = require('thenjs');
module.exports = function(app) {
app.use('/admin/forum', router);
};
//type:类型(板块,照片墙等); key:类型里面的标题(title,desc等);value:值
function getForumConfig(key, value, ent_code) {
var forumConfig = {};
forumConfig.meta_key = key;
forumConfig.meta_value = value;
forumConfig.ent_code = ent_code;
return forumConfig;
}
//批量创建默认分享设置
router.post('/forumConfig/put', function(req, res, next) {
var model = req.body;
var ent_code = req.session.user.ent_code;
model.ent_code = ent_code;
if (model.ent_code) {
forumShareConfigService.create(model, function(err, result) {
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
res.json(_.assign(result, returnCode.SUCCESS));
}
});
} else {
res.json(returnCode.BUSY);
}
});
//初始化默认分享数据
router.get('/forumConfig/getConfig', function(req, res, next) {
var ent_code = req.session.user.ent_code;
forumShareConfigService.getByKey(ent_code, req.query.meta_key, function(err, result) {
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
res.json({message:'success',data:result});
}
});
});
...@@ -294,9 +294,8 @@ router.post('/thread/comment/add', function(req, res, next) { ...@@ -294,9 +294,8 @@ router.post('/thread/comment/add', function(req, res, next) {
if(err){ if(err){
res.json(returnCode.BUSY); res.json(returnCode.BUSY);
}else{ }else{
res.json(returnCode.SUCCESS,comment:result); res.json(returnCode.SUCCESS);
} }
}); });
} }
}); });
\ No newline at end of file
This diff is collapsed.
...@@ -9,14 +9,15 @@ var forumThreadService = require('../../service/forumThreadService'); ...@@ -9,14 +9,15 @@ var forumThreadService = require('../../service/forumThreadService');
var forumShareConfigService = require('../../service/forumShareConfigService'); var forumShareConfigService = require('../../service/forumShareConfigService');
var forumShareService = require('../../service/forumShareService'); var forumShareService = require('../../service/forumShareService');
var config = require('../../../config/config'); var config = require('../../../config/config');
var httpService=require('../../service/httpService');
var then = require('thenjs'); var then = require('thenjs');
//var forumInfoService = require('../../service/forumInfoService'); var forumInfoService = require('../../service/forumInfoService');
module.exports = function(app) { module.exports = function(app) {
app.use('/v1/forum', router); app.use('/v1/forum', router);
}; };
function getWX(res, title, desc, link, imgUrl, mid) { function write(res, title, desc, link, imgUrl, mid, ent_code) {
link = config.service + link + "&mid=" + mid; link = config.service + link + "&mid=" + mid;
res.writeHead(200, { res.writeHead(200, {
'Content-Type': 'text/javascript', 'Content-Type': 'text/javascript',
...@@ -31,7 +32,11 @@ function getWX(res, title, desc, link, imgUrl, mid) { ...@@ -31,7 +32,11 @@ function getWX(res, title, desc, link, imgUrl, mid) {
// imgUrl = 'http://dev.fs.wxpai.cn/upload/100001_2015410_1428671539587_40.jpg', // imgUrl = 'http://dev.fs.wxpai.cn/upload/100001_2015410_1428671539587_40.jpg',
// desc = '测试描述'; // desc = '测试描述';
// var string = ''; // var string = '';
var string = 'wx.onMenuShareTimeline({' + '\"title\": \"' + title + '\",' + '\"link\":\"' + link + '\",' + '\"imgUrl\": \"' + imgUrl + '\", ' + 'success: function(){},' + 'cancel: function () {}' + ' });' + ' wx.onMenuShareAppMessage({' + '\"title\": \"' + title + '\", ' + '\"desc\": \"' + desc + '\", ' + '\"link\":\"' + link + '\", ' + '\"imgUrl\": \"' + imgUrl + '\", ' + '\"type\":\'\' ,' + '\"dataUrl\": \'\', ' + 'success: function(){},' + 'cancel: function () { ' + '}' + ' });' var success = '$.ajax({'+
'type:\'GET\','+
'url: \'/v1/forum/'+ent_code+'/timeline\''+
'});';
var string = 'wx.onMenuShareTimeline({' + '\"title\": \"' + title + '\",' + '\"link\":\"' + link + '\",' + '\"imgUrl\": \"' + imgUrl + '\", ' + 'success: function(){'+success+'},' + 'cancel: function () {}' + ' });' + ' wx.onMenuShareAppMessage({' + '\"title\": \"' + title + '\", ' + '\"desc\": \"' + desc + '\", ' + '\"link\":\"' + link + '\", ' + '\"imgUrl\": \"' + imgUrl + '\", ' + '\"type\":\'\' ,' + '\"dataUrl\": \'\', ' + 'success: function(){},' + 'cancel: function () { ' + '}' + ' });'
res.write('wx.ready(function(){' + string + '});'); res.write('wx.ready(function(){' + string + '});');
res.write('wx.error(function(res){console.log(res);});'); res.write('wx.error(function(res){console.log(res);});');
...@@ -39,134 +44,33 @@ function getWX(res, title, desc, link, imgUrl, mid) { ...@@ -39,134 +44,33 @@ function getWX(res, title, desc, link, imgUrl, mid) {
res.end(); res.end();
} }
//微信分享接口 function getWX(res, title, desc, link, imgUrl, mid,ent_code, id,type,forumThread) {
router.get('/:ent_code/share.js', function(req, res, next) { //['{板块名称}','{文章标题}','{话题名称}','{照片墙标题}'];
var rs = {}; //share_type:是否使用默认设置:1使用默认分享设置 2.使用自己的分享设置
var type = req.query.type; link = config.service + link + "&mid=" + mid;
var id = req.query.id;
var mid = req.session.openUser.mid || 0;
var ent_code = req.params.ent_code;
var link = '/app/forum/' + ent_code + '/index?pageUrl=';
if (type) {
//板块微信接口
if (type === 'Info') {
then(function(cont) {
forumShareConfigService.getByEntCode(ent_code, function(err, result) {
var title = '', if (type==="Info") {
desc = '', forumInfoService.getInfoById(id, function(err, forumInfo) {
imgUrl = ''; if (err || forumInfo < 1) {
if (result) { console.error("板块不存在或者发生未知错误");
for (var i = 0; i < result.length; i++) {
if (result[i].meta_key === 'share_info_title') {
title = result[i].meta_value;
} else if (result[i].meta_key === 'share_info_description') {
desc = result[i].meta_value;
} else if (result[i].meta_key === 'share_info_icon') {
imgUrl = result[i].meta_value;
}
}
link = link + 'index&infoId=' + id;
getWX(res, title, desc, link, imgUrl, mid);
} else {
cont(err);
}
});
}).fail(function(cont, err) {
console.error(err);
res.json({
result: false,
code: '10002'
});
});
} else if (!id) {
console.error("ID不能为空");
res.json({ res.json({
message: 'ID不能为空', message: '板块不存在或者发生未知错误',
result: false, result: false,
code: '10002' code: '10002',
error:err
}); });
} else if (type === 'Thread') { }else{
then(function(cont) { title = title.replace(/{板块名称}/g, forumInfo.name);
//获得文章 desc = desc.replace(/{板块名称}/g, forumInfo.name);
forumThreadService.getById(id, function(err, result) { write(res, title, desc, link, imgUrl, mid,ent_code);
if (result) {
cont(null, result);
} else {
cont(err);
} }
}); });
}).then(function(cont, result) { } else if(type === "Thread"){
//如果没有share值则用默认值
if (!result.share) {
forumShareConfigService.getByEntCode(ent_code, function(err, sc) {
var title = '',
desc = '',
imgUrl = '';
if (sc) {
var key = '';
//1、文章 2、话题 3、照片墙
if (result.type === 1 || (result.type === 2 && result.level === 2)) { title = title.replace(/{文章标题}|{话题名称}|{照片墙标题}/g, forumThread.title);
link = link + 'thread&infoId=' + result.info + '&ent_code=' + ent_code + '&id=' + result._id; desc = desc.replace(/{文章标题}|{话题名称}|{照片墙标题}/g, forumThread.title);
key = 'article'; write(res, title, desc, link, imgUrl, mid,ent_code);
} else if (result.type === 2 && result.level === 1) {
link = link + 'topicList&infoId=' + result.info + '&ent_code=' + ent_code + '&id=' + result._id;
key = 'topic';
} else if (result.type === 3) {
link = link + 'photoList&infoId=' + result.info + '&ent_code=' + ent_code + '&id=' + result._id;
key = 'photo';
}
for (var i = 0; i < sc.length; i++) {
if (sc[i].meta_key === 'share_' + key + '_title') {
title = sc[i].meta_value;
} else if (sc[i].meta_key === 'share_' + key + '_description') {
desc = sc[i].meta_value;
} else if (sc[i].meta_key === 'share_' + key + '_icon') {
imgUrl = sc[i].meta_value;
}
}
getWX(res, title, desc, link, imgUrl, mid);
} else {
cont(err);
} }
}); }
} else {
//如果有分享设置,则返回分享设置
forumShareService.getById(result.share, function(err, forumShare) {
//1、文章 2、话题 3、照片墙
if (result.type === 1 || (result.type === 2 && result.level === 2)) {
link = link + 'thread&infoId=' + result.info + '&ent_code=' + ent_code + '&id=' + result._id;
//key = 'article';
} else if (result.type === 2 && result.level === 1) {
link = link + 'topicList&infoId=' + result.info + '&ent_code=' + ent_code + '&id=' + result._id;
//key = 'topic';
} else if (result.type === 3) {
link = link + 'photoList&infoId=' + result.info + '&ent_code=' + ent_code + '&id=' + result._id;
//key = 'photo';
}
getWX(res, forumShare.title, forumShare.description, link, forumShare.icon, mid);
});
}
}).fail(function(cont, err) {
console.error(err);
res.json({
result: false,
code: '10002'
});
});
}
} else {
res.json({
result: false,
code: '10002'
});
}
});
'use strict';
var express = require('express'),
router = express.Router(),
returnCode = require('../../utils/returnCode'),
_ = require('lodash');
var mongoose = require('mongoose');
//var forumThreadService = require('../../service/forumThreadService');
var forumShareConfigService = require('../../service/forumShareConfigService');
//var forumShareService = require('../../service/forumShareService');
//var config = require('../../../config/config');
var then = require('thenjs');
module.exports = function(app) {
app.use('/v1/forum', router);
};
//type:类型(板块,照片墙等); key:类型里面的标题(title,desc等);value:值
function getForumConfig(key, value, ent_code) {
var forumConfig = {};
forumConfig.meta_key = key;
forumConfig.meta_value = value;
forumConfig.ent_code = ent_code;
return forumConfig;
}
//批量创建默认分享设置
router.post('/forumConfig/put', function(req, res, next) {
var model = req.body;
var ent_code = req.session.user.ent_code;
model.ent_code = ent_code;
if (model.ent_code) {
forumShareConfigService.create(model, function(err, result) {
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
res.json(_.assign(result, returnCode.SUCCESS));
}
});
} else {
res.json(returnCode.BUSY);
}
});
//初始化默认分享数据
router.get('/forumConfig/getConfig', function(req, res, next) {
var ent_code = req.session.user.ent_code;
forumShareConfigService.getByKey(ent_code, req.query.meta_key, function(err, result) {
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
res.json({message:'success',data:result});
}
});
});
This diff is collapsed.
'use strict';
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
//黑名单
var BlackListSchema = new Schema({
ent_code: {
type: Number,
require: true,
index: true
},
blackOpenId:{//被加入黑名单的openid
type: String,
require: false,
index: true
},
blackUser: { //被加入黑名单的user
type: Schema.Types.ObjectId,
require: false,
index: true,
ref: 'ForumUser'
},
reason: { //加入黑名单的原因
type: String,
require: false
},
begin: {//黑名单有效时间
type: Date,
require: false
},
end: {//黑名单有效时间
type: Date,
required: false
},
created: {
type: Date,
required: true,
default:Date.now
},
status:{//是否可用 1/0
type: Number,
require: true,
index: true,
default:1
}
}, {
'collection': 'pisns_forum_blacklist'
});
module.exports = mongoose.model('BlackList', BlackListSchema);
\ No newline at end of file
'use strict';
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
//话题广场,板块
var ForumPVLogSchema = new Schema({
ent_code: {
type: Number,
require: true,
index: true
},
user: { //访问者
type: String,
require: true,
index: true,
ref: 'ForumUser'
},
mid: { //会员ID
type: Number,
require: true,
index: true
},
open_id: { //微信公众号唯一识别
type: String,
require: true,
index: true
},
info: { //板块ID
type: String,
index: true,
ref: 'ForumInfo'
},
thread: { //话题、文章、照片墙的ID
type: String,
index: true,
ref: 'forumThread'
},
type: { //页面:1.主页 2.板块 3.文章
type: Number,
index: true,
require: true
},
thread_type: { //文章类型:1.普通文章 2.话题 3.照片墙 4.子文章
type: Number,
index: true
},
p_thread: { //父文章ID
type: Number,
index: true
},
source: { //分享者
type: String
},
ip: { //IP地址
type: String
},
userAgent: {
type: String
},
created: {
type: Date,
required: true,
default: Date.now
}
}, {
'collection': 'pisns_forum_pv_log'
});
module.exports = mongoose.model('ForumPVLog', ForumPVLogSchema);
...@@ -70,6 +70,11 @@ var ForumThreadSchema = new Schema({ ...@@ -70,6 +70,11 @@ var ForumThreadSchema = new Schema({
type: Schema.Types.ObjectId, type: Schema.Types.ObjectId,
ref: 'ForumShare' ref: 'ForumShare'
}, },
share_type:{//是否使用默认设置:1使用默认分享设置 2.使用自己的分享设置
type:Number,
require:true,
default:1
},
pv_count: { //话题的访问量 pv_count: { //话题的访问量
type: Number, type: Number,
require: true, require: true,
......
'use strict';
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
//话题广场,板块
var ForumUVLogSchema = new Schema({
ent_code: {
type: Number,
require: true,
index: true
},
user: { //访问者
type: String,
require: true,
index: true,
ref: 'ForumUser'
},
mid: { //会员ID
type: Number,
require: true,
index: true
},
open_id: { //微信公众号唯一识别
type: String,
require: true,
index: true
},
info: { //板块ID
type: String,
index: true,
ref: 'ForumInfo'
},
thread: { //话题、文章、照片墙的ID
type: String,
index: true,
ref: 'forumThread'
},
type: { //页面:1.主页 2.板块 3.文章
type: Number,
index: true,
require: true
},
thread_type: { //文章类型:1.话题 2.文章 3.照片墙 4.子文章
type: Number,
index: true
},
p_thread: { //父文章ID
type: Number,
index: true
},
source: { //分享者
type: String
},
ip: { //IP地址
type: String
},
userAgent: {
type: String
},
created: {
type: Date,
required: true,
default: Date.now
}
}, {
'collection': 'pisns_forum_uv_log'
});
module.exports = mongoose.model('ForumUVLog', ForumUVLogSchema);
'use strict';
var mongoose = require('mongoose');
var BlackList = mongoose.model('BlackList');
var ForumUserService = require("./forumUserService");
var async=require('async');
exports.getBlackPageList=function(condition,pageNo,pageSize,callback){
var _condition = condition || {};
var pageNo = Number(pageNo) || 1;
var pageSize = pageSize || 10;
var obj={};
obj.total=0;
obj.pageNo=pageNo;
obj.pageSize=pageSize;
obj.items=[];
var search = function(count){
var skip = (pageNo - 1) * pageSize;
skip = skip >0 ? skip :0;
var limit = pageSize;
BlackList.find(_condition)
.populate('blackUser').limit(limit)
.skip(skip).sort('-created').exec(function(err,blackUsers){
if(err){
console.error(err);
return callback && callback(err,null);
}
obj.total=count;
obj.pageNo=pageNo;
obj.pageSize=pageSize;
obj.items=blackUsers;
return callback && callback(null,obj);
});
};
BlackList.count(_condition, function (err, count) {
if(err){
return callback && callback(err,null);
}
if(!!!count){
return callback && callback(null,obj);
}
return search(count);
});
};
exports.addBlack = function(blackList,entcode,callback){
if(!!!blackList ||
(!!!blackList.blackOpenId && !!!blackList.uid)){
return callback && callback('bad args');
}
blackList.ent_code = entcode;
async.waterfall([function(cb) {
var uid =blackList.uid;
delete blackList.uid;
if(!!!uid){
return cb();
}
ForumUserService.getUserById(uid,
function(err,result){
if(!!!err && result){
blackList.blackUser = result;
}
cb();
});
},
function(n, cb) {
var _blackList= new BlackList(blackList);
_blackList.save(function(err, black) {
if(err){
console.error(err);
return callback && callback(err);
}
return callback && callback(null,black);
});
}],
function(err, result) {
return callback && callback(err);
});
};
exports.addBlacks = function(blacks,entcode,callback){
if(!!!blacks ||
!!!blacks.length){
return callback && callback('bad args');
}
var asyncTasks = [];
blacks.forEach(function(black){
asyncTasks.push(function(callback) {
exports.addBlack(black,entcode,function(err,result){
callback(null, !!err ? {err:err} : result);
});
});
});
async.parallel(asyncTasks, function(err, results) {
if (err || !!!results || !!!results.length) {
return callback && callback(err || "操作失败!");
}
var sucs = [];
var errs = [];
results.forEach(function(result){
if(result){
if(result.err){
errs.push(result.err);
}else{
sucs.push(result);
}
}
});
return callback && callback(null,{sucs:sucs,errs:errs});
});
};
exports.getBlackById = function(id,callback){
BlackList.findById(id).populate('blackUser').exec(function(err, black) {
if (err) {
return callback && callback(err,null);
}
return callback && callback(null,black);
});
};
//根据ID更新黑名单
exports.updateBlackById=function(id,entity,callback){
if(!!!id ||!!!entity){
return callback && callback('bad args');
}
async.waterfall([function(cb) {
var uid =entity.uid;
delete entity.uid;
delete entity.blackUser;
if(!!!uid){
return cb();
}
ForumUserService.getUserById(uid,
function(err,result){
if(!!!err && result){
entity.blackUser = result._id;
}
cb();
});
},
function(n, cb) {
BlackList.update({ _id: id}, entity,null,function(err,result){
if (err) {
console.error(err);
return callback && callback(err,null);
}
return callback && callback(null,result);
});
}],
function(err, result) {
return callback && callback(err);
});
};
exports.removeBlackById = function(id,callback){
BlackList.remove({ _id: id},function(err,result){
if (err) {
return callback && callback(err,null);
}
return callback && callback(null,result);
});
}
\ No newline at end of file
...@@ -2,29 +2,77 @@ ...@@ -2,29 +2,77 @@
var mongoose = require('mongoose'); var mongoose = require('mongoose');
var ForumShareConfig = mongoose.model('ForumShareConfig'); var ForumShareConfig = mongoose.model('ForumShareConfig');
var async=require('async'); var then = require('thenjs');
//批量创建配置信息 //批量创建配置信息
exports.create=function(entity,callback){ exports.create = function(entity, callback) {
//var forumShareConfig = new ForumShareConfig(entity); var forumShareConfig = new ForumShareConfig(entity);
ForumShareConfig.create(entity,function(err, forumShareConfig) {
then(function(cont) {
ForumShareConfig.find({
ent_code: entity.ent_code,
meta_key: entity.meta_key
}).exec(cont);
}).then(function(cont, config) {
if (config.length > 0) {
//更新
ForumShareConfig.update({
meta_key: entity.meta_key,
ent_code: entity.ent_code
}, {
meta_value: entity.meta_value
}, {
multi: false
},
function(affected,result) {
cont(null,result);
});
} else {
//增加
forumShareConfig.save(function(err, result) {
if (err) { if (err) {
console.error(err); cont(err);
callback(err,null);
} else { } else {
callback(null,forumShareConfig); cont(null,result);
} }
}); });
}
}).then(function(cont,result) {
callback(null, result);
}).fail(function(cont, err) {
console.error(err);
callback(err, null);
});
}; };
exports.getByKey = function(ent_code, key, callback) {
ForumShareConfig.findOne({
ent_code: ent_code,
meta_key: key
}, function(err, result) {
if (err) {
console.error(err);
callback(err, null);
} else {
callback(null, result);
}
});
}
//根据ent_code获取配置信息 //根据ent_code获取配置信息
exports.getByEntCode = function(ent_code,callback){ exports.getByEntCode = function(ent_code, callback) {
ForumShareConfig.find({ ent_code: ent_code},function(err,result){ ForumShareConfig.find({
ent_code: ent_code
}, function(err, result) {
if (err) { if (err) {
console.error(err); console.error(err);
callback(err,null); callback(err, null);
} else { } else {
callback(null,result); callback(null, result);
} }
}); });
}; };
//根据
...@@ -2,13 +2,97 @@ ...@@ -2,13 +2,97 @@
var mongoose = require('mongoose'); var mongoose = require('mongoose');
var ForumThread = mongoose.model('ForumThread'); var ForumThread = mongoose.model('ForumThread');
var ForumComment = mongoose.model('ForumComment'); var ForumComment = mongoose.model('ForumComment');
var ForumShare = mongoose.model('ForumShare');
var forumCommentService = require('./forumCommentService'); var forumCommentService = require('./forumCommentService');
var async = require('async'); var async = require('async');
var then = require('thenjs');
//查询帖子
exports.findThreadByPage = function(pageNo, pageSize, q, callback) {
then(function(cont) {
ForumThread.find(q).populate('from').count(cont);
}).then(function(cont, count) {
var skip = (pageNo - 1) * pageSize;
var limit = count - skip > pageSize ? pageSize : (count - skip);
ForumThread.find(q).skip(skip).limit(limit).sort('-created').exec(function(err, docs) {
cont(err, count, docs);
});
}).then(function(cont, count, threads) {
var rsJson = {
result: true,
total: count,
datas: threads
};
callback(null, rsJson);
}).fail(function(cont, err) {
console.error(err);
var rsJson = {
result: false,
err: err
};
callback(err, rsJson);
});
};
//查询评论
exports.findCommentByPage = function(pageNo, pageSize, q, callback) {
then(function(cont) {
ForumComment.find(q).populate('from').count(cont);
}).then(function(cont, count) {
var skip = (pageNo - 1) * pageSize;
var limit = count - skip > pageSize ? pageSize : (count - skip);
ForumComment.find(q).skip(skip).limit(limit).sort('-created').populate('from').exec(function(err, docs) {
cont(err, count, docs);
});
}).then(function(cont, count, threads) {
var rsJson = {
result: true,
total: count,
datas: threads
};
callback(null, rsJson);
}).fail(function(cont, err) {
console.error(err);
var rsJson = {
result: false,
err: err
};
callback(err, rsJson);
});
};
//创建文章 //创建文章
exports.createThread = function(entity, callback) { exports.createThread = function(entity, callback) {
if (!entity.share) {
var forum = new ForumThread(entity);
forum.save(function(err, forum) {
if (err) {
console.error(err);
callback(err, null);
} else {
callback(null, forum);
}
});
} else {
var forumShare = new ForumShare(entity.share);
forumShare.ent_code = entity.ent_code;
forumShare.save(function(err, forumShare) {
if (err) {
console.error(err);
callback(err, null);
} else {
entity.share = forumShare._id;
var forum = new ForumThread(entity); var forum = new ForumThread(entity);
forum.save(function(err, forum) { forum.save(function(err, forum) {
if (err) { if (err) {
...@@ -18,6 +102,10 @@ exports.createThread = function(entity, callback) { ...@@ -18,6 +102,10 @@ exports.createThread = function(entity, callback) {
callback(null, forum); callback(null, forum);
} }
}); });
}
});
}
}; };
//根据ID获取文章记录,不查评论,子话题 //根据ID获取文章记录,不查评论,子话题
...@@ -41,7 +129,7 @@ exports.getThreadById = function(tid, callback) { ...@@ -41,7 +129,7 @@ exports.getThreadById = function(tid, callback) {
var conditions = { var conditions = {
_id: tid _id: tid
}; };
ForumThread.find(conditions).populate('from').populate('info').exec(function(err, docs) { ForumThread.find(conditions).populate('from').populate('info').populate('share').exec(function(err, docs) {
if (err) { if (err) {
console.error(err); console.error(err);
callback(err, null); callback(err, null);
...@@ -165,6 +253,14 @@ exports.getThreadById = function(tid, callback) { ...@@ -165,6 +253,14 @@ exports.getThreadById = function(tid, callback) {
//根据ID更新文章 //根据ID更新文章
exports.updateThreadById = function(tid, entity, callback) { exports.updateThreadById = function(tid, entity, callback) {
var shareEntity = entity.share;
if (entity.share._id) {
entity.share = entity.share._id;
}else{
entity.share = '';
}
if (entity.share) {
ForumThread.update({ ForumThread.update({
_id: tid _id: tid
}, entity, null, function(err, result) { }, entity, null, function(err, result) {
...@@ -172,9 +268,54 @@ exports.updateThreadById = function(tid, entity, callback) { ...@@ -172,9 +268,54 @@ exports.updateThreadById = function(tid, entity, callback) {
console.error(err); console.error(err);
callback(err, null); callback(err, null);
} else { } else {
callback(null, null); ForumShare.update({
_id: shareEntity._id
}, shareEntity, null, function(err, se) {
if (err) {
console.error(err);
callback(err, null);
} else {
callback(null, entity);
} }
}); });
}
});
} else {
if (shareEntity.title || shareEntity.description || shareEntity.icon) {
shareEntity.ent_code = entity.ent_code;
var forumShare = new ForumShare(shareEntity);
forumShare.save(function(err, forumShare) {
entity.share = forumShare._id;
ForumThread.update({
_id: tid
}, entity, null, function(err, result) {
if (err) {
console.error(err);
callback(err, null);
} else {
callback(null, entity);
}
});
});
} else {
delete entity.share;
ForumThread.update({
_id: tid
}, entity, null, function(err, result) {
if (err) {
console.error(err);
callback(err, null);
} else {
callback(null, entity);
}
});
}
}
}; };
//根据ID更新文章 //根据ID更新文章
......
...@@ -56,3 +56,36 @@ exports.updateUserById=function(uid,entity,callback){ ...@@ -56,3 +56,36 @@ exports.updateUserById=function(uid,entity,callback){
} }
}); });
}; };
exports.getUsers=function(pageNo,pageSize,callback){
var pageNo = pageNo || 1;
var pageSize = pageSize || 10;
var getPageList = function(count){
var skip = (pageNo - 1) * pageSize;
var limit = count - skip > pageSize ? pageSize : (count - skip);
ForumUser.find({}).limit(limit).skip(skip)
.exec(function(err,results){
if(err){
callback(err,null);
}else{
if(results){
callback(null,{total:count,items:results});
}else{
callback(null,{total:count,items:[]});
}
}
});
};
ForumUser.count({}).exec(function(err,count){
if(err){
callback(err,null);
}else{
if(count > 0){
getPageList(count);
}else{
callback(null,{total:0,items:[]});
}
}
});
};
...@@ -2,10 +2,97 @@ ...@@ -2,10 +2,97 @@
// var request=require('request'); // var request=require('request');
// var REMOTE_URL='http://127.0.0.1:3011/admin/forum/http/receive'; // var REMOTE_URL='http://127.0.0.1:3011/admin/forum/http/receive';
var ACTION_KEY = {
'post': 'FORUM_THREAD_POST',
'share': 'FORUM_THREAD_SHARE',
'share_timeline': 'FORUM_THREAD_SHARE_TIMELINE',
'comment': 'FORUM_THREAD_COMMENT',
'thread_praise': 'FORUM_THREAD_PRAISE',
'comment_praise': 'FORUM_COMMENT_PRAISE',
'reply': 'FORUM_COMMENT_REPLY',
'user_from_share': 'FORUM_USER_FROM_SHARE'
};
var mongoose = require('mongoose'),
moment = require('moment'),
then = require('thenjs');
var ForumPVLog = mongoose.model('ForumPVLog');
var ForumUVLog = mongoose.model('ForumUVLog');
exports.sendRequest = function(ent_code, mid, action, messageid, integral, exp) {
var obj = {
tag: 'member',
key: 'forum',
action: ACTION_KEY[action],
mid: mid,
entcode: ent_code,
messageid: messageid || '',
integral: integral || 0,
exp: exp || 0
};
redis.lpush('adapter-redis-to-ons', JSON.stringify(obj), function(err, reply) {
if (err) {
console.error(err);
}
});
};
var getClientIP = function(req) {
var ipAddress;
var headers = req.headers;
var forwardedIpsStr = headers['x-real-ip'] || headers['x-forwarded-for'];
if (forwardedIpsStr) {
ipAddress = forwardedIpsStr;
} else {
ipAddress = null;
}
if (!ipAddress) {
ipAddress = req.connection.remoteAddress;
}
return ipAddress;
};
exports.sendRequest=function(ent_code,uid,tid,action){ exports.createLog = function(req,info,type,thread_type,thread,p_thread) {
// var url=REMOTE_URL+'?ent_code='+ent_code+'&uid='+uid+'&tid='+tid+'&action='+action;
// request.get({url:url}, function (e, r, body) {
// }); var logObj = {
ent_code: req.session.user.ent_code,
mid: req.session.openUser.mid,
open_id: req.session.mobileForumUser.openId,
user: req.session.mobileForumUser.userId,
info: info,
type: type,
thread_type:thread_type,
thread:thread,
p_thread:p_thread,
ip: getClientIP(req),
userAgent: req.headers['user-agent']
};
if (logObj) {
then(function(cont){
var pv_model = new ForumPVLog(logObj);
pv_model.save(cont);
}).then(function(cont){
var q = {
created:{$gte:moment(new Date()).format('YYYY-MM-DD')},
mid:logObj.mid,
openId:logObj.openId,
user:logObj.user,
info:logObj.info
};
if(logObj.thread){
q.thread = logObj.thread;
q.thread_type = logObj.thread_type;
}
ForumUVLog.findOne(q,function(err,doc){
cont(err,doc?false:true);
})
}).then(function(cont,isLog){
if(isLog){
var uv_model = new ForumUVLog(logObj);
uv_model.save();
}
}).fail(function(cont,err){
console.error(err);
});
} else {
console.error('没有日志信息');
}
}; };
...@@ -20,7 +20,8 @@ ...@@ -20,7 +20,8 @@
"method-override": "~2.3.0", "method-override": "~2.3.0",
"mongoose": "3.8.21", "mongoose": "3.8.21",
"morgan": "~1.5.0", "morgan": "~1.5.0",
"oss-easy": "^0.2.9" "oss-easy": "^0.2.9",
"thenjs": "^1.5.0"
}, },
"devDependencies": { "devDependencies": {
"grunt": "~0.4.5", "grunt": "~0.4.5",
......
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