Commit 9acd2cc4 authored by yaobeibei's avatar yaobeibei

merge master_oem

parents 46aae887 df4a32fe
File added
......@@ -15,8 +15,8 @@ RUN npm i --only=production --registry https://registry.npm.taobao.org
ENV SERVICE_PORT=8082
ENV PROJECT_LEVEL=production
ENV MONGO='mongodb://mongo-adpro-ssp-v2-rs-1.localhost:1301/remarketing?replicaSet=adpro_ssp_v2_rs'
# ENV MONGO='mongodb://mongo-adpro-ssp-v2-rs-2.localhost:1301/remarketing?replicaSet=adpro_ssp_v2_rs'
ENV MONGO='mongodb://mongo-adpro-ssp-v2-rs-1.localhost:1301,mongo-adpro-ssp-v2-rs-2.localhost:1301,mongo-adpro-ssp-v2-rs-3.localhost:1301/remarketingAgent?replicaSet=adpro_ssp_v2_rs&adpro_ssp_v2_rs=SECONDARY'
ENV MONGO_OEM='mongodb://bjwjh-admin:c9yJ2gBFkp7U6@mongo-bjwjh-rs-1.localhost:1302,mongo-bjwjh-rs-2.localhost:1302,mongo-bjwjh-rs-3.localhost:1302/oem_maitian_remarketingAgent?replicaSet=bjwjh-rs&authSource=admin'
ENV NODE_ENV='production'
EXPOSE 8082
......
......@@ -3,44 +3,56 @@ const mongoClient = mongodb.MongoClient
const app = require('express').Router()
const _ = require('lodash')
const moment = require('moment')
const xlsx = require('node-xlsx')
var reg = /@test.com$|@123.com$|@goyoo.com$|@xiaoyun.com$|^@|^test|@dis.com$|time-stone.cn$|^tangyong|^875652541|@1.com$|@xioayun.com$/i
var dbpath = null
if (process.env.MONGO) {
dbpath = process.env.MONGO || 'mongodb://10.11.3.127:1301/remarketing'
} else {
dbpath = 'mongodb://localhost:27017/remarketing'
}
var dbpath_oem = null
if (process.env.MONGO) {
dbpath_oem = 'mongodb://bjwjh-admin:c9yJ2gBFkp7U6@mongo-bjwjh-rs-1.localhost:1302,mongo-bjwjh-rs-2.localhost:1302,mongo-bjwjh-rs-3.localhost:1302/oem_maitian_remarketingAgent?replicaSet=bjwjh-rs&authSource=admin'
} else {
dbpath_oem = 'mongodb://localhost:27017/remarketing2'
}
mongoClient.connect(dbpath_oem, function (err, res) {
var db = {}
var db_oem_mtty = {}
var db_oem_xibao = {}
var db_agent = {}
mongoClient.connect(dbpath, {useNewUrlParser: true}, function (err, res) {
if (err) return console.log(err)
db = res.db('remarketing')
db_agent = res.db('remarketingAgent')
})
mongoClient.connect(dbpath_oem, function (err, res) {
mongoClient.connect(dbpath_oem, {useNewUrlParser: true}, function (err, res) {
if (err) return console.log(err)
if (process.env.MONGO) {
db_oem_mtty = res.db('oem_mtty_remarketing')
db_oem_xibao = res.db('oem_xibao_remarketing')
console.log('线上')
} else {
db_oem_mtty = res.db('remarketing2')
db_oem_xibao = res.db('remarketing3')
db_agent = res.db('remarketingAgent')
}
})
// function getSession (sessionID, res) {
// if (!sessionID) {
// // res.send({status: 500, data: '数据库连接失败'})
// } else if (sessionID === 'admin') {
// return db
// } else {
// db = db_oem_mtty
// return db
// }
// }
// 登陆接口
app.post('/login', async function (req, res) {
......@@ -66,39 +78,24 @@ app.post('/login', async function (req, res) {
}
})
app.post('/creatOEM', async function (req, res) {
// 创建代理商运营账号(备用,可能直接引用代理商账号,同步登陆)
app.post('/creatAgent', async function (req, res) {
console.log(res.body)
let { OEM_email, OEM_account, OEM_password, OEM_company } = req.body
let { email, password, password2, company } = req.body
await db.collection('OEM_account').insert({OEM_email: OEM_email, OEM_account: OEM_account, OEM_password: OEM_password, OEM_company: OEM_company})
await db.collection('OEM_account').insert({email: email, password: password, company: company}, (err, rep) => {
if (err) { console.log (err) }
if (req) {
res.send({status: 200, message: '创建成功'})
}
})
res.send({status: 200, message: '创建成功'})
})
// 获取登陆账号信息
// app.post('/getAccount', async function (req, res) {
// console.log('获取账号信息')
// console.log(req.body)
// let {sessionID} = req.body
// let oem_account = null
// if (sessionID !== 'admin') {
// console.log(1)
// oem_account = await db.collection('OEM_account').find({_id: mongodb.ObjectId(sessionID)}).toArray()
// console.log(oem_account)
// } else {
// oem_account = [{OEM_email: 'admin', OEM_account: 'admin'}]
// }
//
// console.log(oem_account)
//
// res.send({status: 200, datas: oem_account})
//
// })
// 获取统计数据
app.post('/dataList', async function (req, res) {
console.log('进入了统计')
......@@ -108,7 +105,6 @@ app.post('/dataList', async function (req, res) {
console.log(startTime, endTime)
let dateQs = getTimeRange({ start: startTime, end: endTime, key: 'date' })
// console.log(dateQs)
let results = await db.collection('dailyStats').aggregate([
{
......@@ -122,7 +118,6 @@ app.post('/dataList', async function (req, res) {
}
}
]).sort({ 'date': -1 }).toArray()
// console.log(results)
let touchCount = await db.collection('recognition').aggregate([
{
......@@ -135,7 +130,6 @@ app.post('/dataList', async function (req, res) {
}
}
]).sort({ 'date': -1 }).toArray()
// console.log(touchCount)
let creatQs = getTimeRange({ start: startTime, end: endTime, key: 'createdAt' })
console.log(creatQs)
......@@ -150,7 +144,6 @@ app.post('/dataList', async function (req, res) {
msgCount: { $sum: 1 }
}
}]).sort({ 'date': -1 }).toArray()
// console.log(msgTask)
let callTask = await db.collection('callTask').aggregate([
{
......@@ -162,28 +155,29 @@ app.post('/dataList', async function (req, res) {
callCount: { $sum: 1 }
}
}]).sort({ 'date': -1 }).toArray()
// console.log(callTask)
let companyName = await db.collection('account').find({ from: { $exists: false }, $or: [{ formID: { $exists: false } }, { formID: { $exists: true, $in: ['self', null] } }] }).sort({ 'date': -1 }).toArray()
// console.log(companyName)
let companyName = await db.collection('account').find({ from: { $exists: false }, $or: [{ formID: { $exists: false } }, { formID: { $exists: true, $in: ['self', null] } }], isDelete: {$ne: true} }).sort({ 'date': -1 }).toArray()
let auditDate = getTimeRange({ start: startTime, end: endTime, key: 'auditAt' })
console.log(auditDate)
let getCount = await db.collection('recognition').aggregate([
let start = moment(startTime).startOf('day').toDate()
let end = moment(endTime).endOf('day').toDate()
let getCount = await db.collection('bills').aggregate([
{
$match: auditDate
$match: {'type': 'audit', 'pre': false, 'createdAt': {$gt: start, $lte: end}}
},
{
$group: {
_id: '$pubID',
getCount: { $sum: 1 }
_id: '$accountID',
getCount: { $sum: '$number' }
}
}]).sort({ 'date': -1 }).toArray()
let dataArr = []
let item = {}
companyName.forEach(x => {
let item = {}
item.time = startTime + ' 至 ' + endTime
item.company = x.company
item.email = x.email
......@@ -200,7 +194,7 @@ app.post('/dataList', async function (req, res) {
})
getCount.forEach(m => {
if (m._id + '' === x._id + '') {
item.getCount = m.getCount
item.getCount = m.getCount / 3
}
})
msgTask.forEach(n => {
......@@ -219,7 +213,7 @@ app.post('/dataList', async function (req, res) {
if (!reg.test(item.email)) {
dataArr.push(item)
}
item = {}
// dataArr.push(item)
})
let arrTotal = dataArr.length
......@@ -237,8 +231,7 @@ app.post('/distributor', async function (req, res) {
console.log(startTime, endTime)
let dateQs = getTimeRange({ start: startTime, end: endTime, key: 'date' })
// console.log(dateQs)
let results = await db.collection('dailyStats').aggregate([
{
$match: dateQs
......@@ -251,7 +244,6 @@ app.post('/distributor', async function (req, res) {
}
}
]).sort({ 'date': -1 }).toArray()
// console.log(results)
let touchCount = await db.collection('recognition').aggregate([
{
......@@ -264,7 +256,6 @@ app.post('/distributor', async function (req, res) {
}
}
]).sort({ 'date': -1 }).toArray()
// console.log(touchCount)
let creatQs = getTimeRange({ start: startTime, end: endTime, key: 'createdAt' })
console.log(creatQs)
......@@ -279,7 +270,6 @@ app.post('/distributor', async function (req, res) {
msgCount: { $sum: 1 }
}
}]).sort({ 'date': -1 }).toArray()
// console.log(msgTask)
let callTask = await db.collection('callTask').aggregate([
{
......@@ -291,13 +281,11 @@ app.post('/distributor', async function (req, res) {
callCount: { $sum: 1 }
}
}]).sort({ 'date': -1 }).toArray()
// console.log(callTask)
let companyName = await db.collection('account').find({ fromID: { $exists: true, $nin: ['self', null] } }).sort({ 'date': -1 }).toArray()
// console.log(companyName)
let companyName = await db.collection('account').find({ fromID: { $exists: true, $nin: ['self', null] }, isDelete: {$ne: true} }).sort({ 'date': -1 }).toArray()
let auditDate = getTimeRange({ start: startTime, end: endTime, key: 'auditAt' })
console.log(auditDate)
let getCount = await db.collection('recognition').aggregate([
{
$match: auditDate
......@@ -310,9 +298,10 @@ app.post('/distributor', async function (req, res) {
}]).sort({ 'date': -1 }).toArray()
let dataArr = []
let item = {}
companyName.forEach(x => {
let item = {}
item.time = startTime + ' 至 ' + endTime
item.company = x.company
item.email = x.email
......@@ -349,7 +338,8 @@ app.post('/distributor', async function (req, res) {
if (!reg.test(item.email)) {
dataArr.push(item)
}
item = {}
// dataArr.push(item)
})
let arrTotal = dataArr.length
......@@ -384,7 +374,7 @@ app.post('/consume', async function (req, res) {
console.log(counsume)
let companyName = await db.collection('account').find({}).sort({ 'date': -1 }).toArray()
let companyName = await db.collection('account').find({isDelete: {$ne: true}}).sort({ 'date': -1 }).toArray()
let data = []
let preData = []
......@@ -395,17 +385,14 @@ app.post('/consume', async function (req, res) {
data.push({ _id: counsume[i]._id.accountID, number: counsume[i].number })
}
}
// console.log(data)
// console.log(preData)
startTime = moment(startTime).startOf('day').format('YYYY-MM-DD')
endTime = moment(endTime).endOf('day').format('YYYY-MM-DD')
let dataArr = []
let item = {}
companyName.forEach(x => {
let item = {}
item.time = startTime + ' 至 ' + endTime
item.company = x.company
item.email = x.email
......@@ -425,10 +412,10 @@ app.post('/consume', async function (req, res) {
if (!reg.test(item.email)) {
dataArr.push(item)
}
item = {}
// dataArr.push(item)
})
let dataTotal = dataArr.length
console.log(dataArr)
let preTotalNumber = 0
let consumeTotalNumber = 0
......@@ -470,21 +457,15 @@ app.post('/finance', async function (req, res) {
}
}]).toArray()
let companyName = await db.collection('account').aggregate([
{
$project: {
_id: '$_id',
company: '$company',
email: '$email'
}
}]).sort({ 'date': -1 }).toArray()
let companyName = await db.collection('account').find({isDelete: {$ne: true}}).sort({ 'date': -1 }).toArray()
startTime = moment(startTime).startOf('day').format('YYYY-MM-DD')
endTime = moment(endTime).startOf('day').format('YYYY-MM-DD')
let dataArr = []
let item = {}
companyName.forEach(x => {
let item = {}
item.time = startTime + ' 至 ' + endTime
item.company = x.company
item.email = x.email
......@@ -500,7 +481,7 @@ app.post('/finance', async function (req, res) {
if (!reg.test(item.email)) {
dataArr.push(item)
}
item = {}
})
let dataTolal = dataArr.length
......@@ -549,7 +530,7 @@ app.post('/surplus', async function (req, res) {
}]).toArray()
let companyName = await db.collection('account').find({}).sort({ 'date': -1 }).toArray()
let companyName = await db.collection('account').find({isDelete: {$ne: true}}).sort({ 'date': -1 }).toArray()
let dataArr = []
......@@ -585,6 +566,7 @@ app.post('/surplus', async function (req, res) {
if (!reg.test(item.email)) {
dataArr.push(item)
}
// dataArr.push(item)
})
let surPlusTotal = 0
dataArr.forEach(x => {
......@@ -592,7 +574,7 @@ app.post('/surplus', async function (req, res) {
})
surPlusTotal = surPlusTotal.toFixed(2)
let dataTotal = dataArr.length
console.log(dataArr)
// console.log(dataArr)
// dataArr = dataArr.slice((currentPage - 1) * pageSize, pageSize * currentPage)
res.send({ status: 200, total: dataTotal, data: dataArr, surplusTotal: surPlusTotal })
})
......@@ -622,14 +604,14 @@ app.post('/releaseInfo', async function (req, res) {
console.log('进入更新公告')
let {title, content, releaseMen, sessionID} = req.body
// getSession(sessionID, res)
let time = new Date()
await db.collection('inform').insertOne({title: title, content: content, releaseMen: releaseMen, time: time}, function (err, rep) {
if (!err) {
db.collection('account').update({}, { $set: { inform: true } }, { multi: true })
res.send({ status: 200, message: '更新成功' })
} else {
res.send({ status: 500, message: '更新失败' })
}
})
})
......@@ -641,13 +623,10 @@ app.post('/getInfo', async function (req, res) {
console.log(req.body)
let { currentPage, pageSize, sessionID} = req.body
// getSession(sessionID, res)
console.log(db)
let info = await db.collection('inform').find().sort({ 'createdAt': -1 }).toArray()
console.log(info)
let dataArr = []
info.forEach(x => {
let item = {}
......@@ -657,6 +636,7 @@ app.post('/getInfo', async function (req, res) {
item.time = moment(x.time).format('YYYY-MM-DD HH:mm:ss')
dataArr.push(item)
})
let dataArrTotal = dataArr.length
dataArr = dataArr.slice((currentPage - 1) * pageSize, pageSize * currentPage)
res.send({ status: 200, data: dataArr, dataTotal: dataArrTotal })
......@@ -669,26 +649,28 @@ app.post('/checkCall', async function (req, res) {
let { startTime, endTime, total, pageSize, currentPage, choose, sessionID} = req.body
// getSession(sessionID, res)
console.log(req.body)
console.log(choose)
startTime = moment(startTime).startOf('day').toDate()
endTime = moment(endTime).endOf('day').toDate()
console.log(startTime)
console.log(endTime)
// 获取remarketing数据库数据
let comapnyName = await db.collection('account').find({}).sort({ 'date': -1 }).toArray()
let callName = await db.collection('bills').find({ 'type': 'dspbuynumber', 'groupID': { $exists: 1 }, 'createdAt': { $gt: startTime, $lte: endTime } }).toArray()
let dspCallGroupsName = await db.collection('dspCallGroups').find().toArray()
let agent = await db_agent.collection('account').find({}).toArray()
let dataArr = []
let item = {}
callName.forEach(x => {
let item = {}
item.oem = '微聚合'
item.preNum = x.preNum / 3
if (x.pre === false) {
item.sendNum = x.number / 3
......@@ -696,15 +678,24 @@ app.post('/checkCall', async function (req, res) {
item.sendNum = 0
}
item.time = moment(x.createdAt).format('YYYY-MM-DD HH:mm')
console.log(item.time)
comapnyName.forEach(y => {
if (x.accountID + '' === y._id + '' || x.accountID === y._id) {
item.companyName = y.company
if (y.fromID) {
agent.forEach(m => {
if (y.fromID === m._id || y.fromID + '' === m._id + '' ) {
item.agent = m.company
item.agentEmail = m.email
}
})
}
}
})
dspCallGroupsName.forEach(z => {
if (x.groupID + '' === z._id + '' || x.groupID === z._id) {
console.log(z.dspgroup)
item.name = x._id
item.groupID = z._id
item.popover = {}
......@@ -725,35 +716,38 @@ app.post('/checkCall', async function (req, res) {
item.popover.consumelist = z.consumelist
item.popover.flowlist = z.flowlist
item.popover.hobbylist = z.hobbylist
item.popover.meta = z.meta
item.popover.interestlist = z.interestlist
item.popover.hostlist = z.hostlist
if (z.applist) {
item.popover.applist = z.applist
}
}
})
if (item.popover) {
if (choose === 'zero' && x.oemCheckStatus === undefined) {
console.log(choose)
if (choose === 'zero' && x.checkStatus === undefined) {
item.status = '未审核'
dataArr.push(item)
item = {}
}
if (choose === 'one' && x.oemCheckStatus === 0) {
console.log(choose)
if (choose === 'one' && x.checkStatus === 0) {
item.status = '审核未通过'
item.disable = true
dataArr.push(item)
item = {}
}
if (choose === 'two' && (x.oemCheckStatus === 1)) {
console.log(choose)
if (choose === 'two' && x.checkStatus === 1) {
item.status = '审核通过'
item.disable = true
dataArr.push(item)
item = {}
}
if (choose === 'all') {
console.log(choose)
if (x.oemCheckStatus === undefined) {
if (x.checkStatus === undefined) {
item.status = '未审核'
item.disable = false
}
......@@ -767,10 +761,203 @@ app.post('/checkCall', async function (req, res) {
}
// console.log(item)
dataArr.push(item)
item = {}
}
}
})
// 获取麦田
let oem_mtty_comapnyName = await db_oem_mtty.collection('account').find({}).sort({ 'date': -1 }).toArray()
let oem_mtty_callName = await db_oem_mtty.collection('bills').find({ 'type': 'dspbuynumber', 'groupID': { $exists: 1 }, 'createdAt': { $gt: startTime, $lte: endTime }, 'oemCheckStatus': 1}).toArray()
let oem_mtty_dspCallGroupsName = await db_oem_mtty.collection('dspCallGroups').find().toArray()
oem_mtty_callName.forEach(x => {
let item = {}
item.oem = x.oem
item.preNum = x.preNum / 3
if (x.pre === false) {
item.sendNum = x.number / 3
} else {
item.sendNum = 0
}
item.time = moment(x.createdAt).format('YYYY-MM-DD HH:mm')
oem_mtty_comapnyName.forEach(y => {
if (x.accountID + '' === y._id + '' || x.accountID === y._id) {
item.companyName = y.company
}
})
oem_mtty_dspCallGroupsName.forEach(z => {
if (x.groupID + '' === z._id + '' || x.groupID === z._id) {
item.name = x._id
item.groupID = z._id
item.popover = {}
if (z.sexlist.length === 1) {
item.popover.sexlist = z.sexlist
} else {
item.popover.sexlist = '不限'
}
item.popover.citylist = z.citylist
item.popover.agelist = z.agelist
if (z.businesstypelist.length === 3) {
item.popover.businesstypelist = '不限'
} else {
item.popover.businesstypelist = z.businesstypelist
}
item.popover.phonelist = z.phonelist
item.popover.opsystemlist = z.opsystemlist
item.popover.consumelist = z.consumelist
item.popover.flowlist = z.flowlist
item.popover.hobbylist = z.hobbylist
item.popover.meta = z.meta
item.popover.interestlist = z.interestlist
item.popover.hostlist = z.hostlist
if (z.applist) {
item.popover.applist = z.applist
}
}
})
if (item.popover) {
if (choose === 'zero' && x.checkStatus === undefined) {
item.status = '未审核'
dataArr.push(item)
}
if (choose === 'one' && x.checkStatus === 0) {
item.status = '审核未通过'
item.disable = true
dataArr.push(item)
}
if (choose === 'two' && x.checkStatus === 1) {
item.status = '审核通过'
item.disable = true
dataArr.push(item)
}
if (choose === 'all') {
if (x.checkStatus === undefined) {
item.status = '未审核'
item.disable = false
}
if (x.checkStatus === 0) {
item.status = '审核未通过'
item.disable = true
}
if (x.checkStatus === 1) {
item.status = '审核通过'
item.disable = true
}
dataArr.push(item)
}
}
})
// 获取喜宝
let oem_xibao_comapnyName = await db_oem_xibao.collection('account').find({}).sort({ 'date': -1 }).toArray()
let oem_xibao_callName = await db_oem_xibao.collection('bills').find({ 'type': 'dspbuynumber', 'groupID': { $exists: 1 }, 'createdAt': { $gt: startTime, $lte: endTime }, 'oemCheckStatus': 1}).toArray()
let oem_xibao_dspCallGroupsName = await db_oem_xibao.collection('dspCallGroups').find().toArray()
oem_xibao_callName.forEach(x => {
let item = {}
item.oem = x.oem
item.preNum = x.preNum / 3
if (x.pre === false) {
item.sendNum = x.number / 3
} else {
item.sendNum = 0
}
item.time = moment(x.createdAt).format('YYYY-MM-DD HH:mm')
oem_xibao_comapnyName.forEach(y => {
if (x.accountID + '' === y._id + '' || x.accountID === y._id) {
item.companyName = y.company
}
})
oem_xibao_dspCallGroupsName.forEach(z => {
if (x.groupID + '' === z._id + '' || x.groupID === z._id) {
item.name = x._id
item.groupID = z._id
item.popover = {}
if (z.sexlist.length === 1) {
item.popover.sexlist = z.sexlist
} else {
item.popover.sexlist = '不限'
}
item.popover.citylist = z.citylist
item.popover.agelist = z.agelist
if (z.businesstypelist.length === 3) {
item.popover.businesstypelist = '不限'
} else {
item.popover.businesstypelist = z.businesstypelist
}
item.popover.phonelist = z.phonelist
item.popover.opsystemlist = z.opsystemlist
item.popover.consumelist = z.consumelist
item.popover.flowlist = z.flowlist
item.popover.hobbylist = z.hobbylist
item.popover.meta = z.meta
item.popover.interestlist = z.interestlist
item.popover.hostlist = z.hostlist
if (z.applist) {
item.popover.applist = z.applist
}
}
})
if (item.popover) {
if (choose === 'zero' && x.checkStatus === undefined) {
item.status = '未审核'
dataArr.push(item)
}
if (choose === 'one' && x.checkStatus === 0) {
item.status = '审核未通过'
item.disable = true
dataArr.push(item)
}
if (choose === 'two' && x.checkStatus === 1) {
item.status = '审核通过'
item.disable = true
dataArr.push(item)
}
if (choose === 'all') {
if (x.checkStatus === undefined) {
item.status = '未审核'
item.disable = false
}
if (x.checkStatus === 0) {
item.status = '审核未通过'
item.disable = true
}
if (x.checkStatus === 1) {
item.status = '审核通过'
item.disable = true
}
dataArr.push(item)
}
}
})
let dataTotal = dataArr.length
dataArr = dataArr.reverse()
dataArr = dataArr.slice((currentPage - 1) * pageSize, currentPage * pageSize)
......@@ -782,34 +969,100 @@ app.post('/checkCall', async function (req, res) {
app.post('/send', async function (req, res) {
console.log('进入send')
console.log(req.body)
let {taskId, groupId, interestlist, hostlist, status, sessionID} = req.body
// getSession(sessionID, res)
let {taskId, groupId, interestlist, hostlist, applist, status, oem} = req.body
if (status === 8) {
await db.collection('bills').update({ '_id': mongodb.ObjectId(taskId) }, { $unset: { 'oemCheckStatus': '' } })
res.send({ status: 200, message: '状态已重置(防止误通过)' })
if (oem === '微聚合' || oem === null || oem === undefined) {
await db.collection('bills').update({ '_id': mongodb.ObjectId(taskId) }, { $unset: { 'checkStatus': '' } })
} else if (oem === '麦田'){
await db_oem_mtty.collection('bills').update({ '_id': mongodb.ObjectId(taskId) }, { $unset: { 'checkStatus': '' } })
} else {
await db_oem_xibao.collection('bills').update({ '_id': mongodb.ObjectId(taskId) }, { $unset: { 'checkStatus': '' } })
}
res.send({ status: 202, message: '状态已重置' })
}
if (status === 0) {
await db.collection('bills').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'oemCheckStatus': 0, pre: false, number: 0 } })
res.send({ status: 200, message: '审核未通过' })
if (oem === '微聚合' || oem === null || oem === undefined) {
await db.collection('bills').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'checkStatus': 0, pre: false, number: 0 } })
} else if (oem === '麦田'){
await db_oem_mtty.collection('bills').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'checkStatus': 0, pre: false, number: 0 } })
} else {
await db_oem_xibao.collection('bills').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'checkStatus': 0, pre: false, number: 0 } })
}
res.send({ status: 201, message: '审核未通过' })
}
if (status === 1) {
await db.collection('bills').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'oemCheckStatus': 1 } })
await db.collection('dspCallGroups').update({ '_id': mongodb.ObjectId(groupId) }, { $set: { 'interestlist': interestlist, 'hostlist': hostlist } })
let updateTime = new Date()
if (oem === '微聚合' || oem === null || oem === undefined) {
await db.collection('bills').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'checkStatus': 1 , 'checkTime': updateTime} })
await db.collection('dspCallGroups').update({ '_id': mongodb.ObjectId(groupId) }, { $set: { 'interestlist': interestlist, 'hostlist': hostlist, 'applist': applist } })
} else if (oem === '麦田'){
await db_oem_mtty.collection('bills').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'checkStatus': 1, 'checkTime': updateTime} })
await db_oem_mtty.collection('dspCallGroups').update({ '_id': mongodb.ObjectId(groupId) }, { $set: { 'interestlist': interestlist, 'hostlist': hostlist , 'applist': applist} })
} else {
await db_oem_xibao.collection('bills').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'checkStatus': 1, 'checkTime': updateTime } })
await db_oem_xibao.collection('dspCallGroups').update({ '_id': mongodb.ObjectId(groupId) }, { $set: { 'interestlist': interestlist, 'hostlist': hostlist, 'applist': applist } })
}
res.send({ status: 200, message: '审核通过' })
}
})
// 获取行业标签
app.post('/getTag', async function (req, res) {
console.log('进入tag')
console.log(req.body)
let { oneChoose } = req.body
let onelevel = {}
let twolevel = {}
let twoOK = {}
function getXlsx () {
var obj = xlsx.parse(__dirname+'/hangye.xlsx');
var excelObj=obj[0].data;
var data = [];
for(var i in excelObj){
var arr=[];
var value=excelObj[i];
var obj = {}
for(var j in value){
if (value[j]) {
data.push(value[j]);
}
}
}
for (var x = 4; x < data.length; x++) {
if (x % 2 === 0) {
if (data[x] < 30) {
onelevel[data[x]] = data[x + 1]
} else {
twolevel[data[x]] = data[x + 1]
}
}
}
}
getXlsx()
console.log(twoOK)
res.send({status: 200, onelevel: onelevel, twolevel: twolevel, twoOK: twoOK})
})
// 短信审核信息
app.post('/getCheckNote', async function (req, res) {
console.log('进入了getData')
let { startTime, endTime, total, pageSize, currentPage, chooseId, operatorId, sessionID} = req.body
console.log(req.body)
console.log(chooseId)
......@@ -817,6 +1070,8 @@ app.post('/getCheckNote', async function (req, res) {
startTime = moment(startTime).startOf('day').toDate()
endTime = moment(endTime).endOf('day').toDate()
// 获取remarketing数据库
console.log(startTime)
console.log(endTime)
let comapnyName = await db.collection('account').find({}).sort({ 'date': -1 }).toArray()
......@@ -827,10 +1082,13 @@ app.post('/getCheckNote', async function (req, res) {
let dspTask = await db.collection('dspTask').find({ 'createdAt': { $gte: startTime, $lte: endTime } }).sort({ 'date': 1 }).toArray()
let agent = await db_agent.collection('account').find({}).toArray()
let dataArr = []
let item = {}
dspTask.forEach(x => {
let item = {}
item.taskID = x._id
item.oem = '微聚合'
item.taskName = x.taskName
item.accountID = x.accountID
item.sendTime = moment(x.sendTime).format('YYYY-MM-DD HH:mm:ss')
......@@ -844,6 +1102,14 @@ app.post('/getCheckNote', async function (req, res) {
comapnyName.forEach(y => {
if (x.accountID + '' === y._id + '') {
item.companyName = y.company
if (y.fromID) {
agent.forEach(m => {
if (y.fromID === m._id || y.fromID + '' === m._id + '' ) {
item.agent = m.company
item.agentEmail = m.email
}
})
}
}
})
msgTagName.forEach(z => {
......@@ -853,7 +1119,9 @@ app.post('/getCheckNote', async function (req, res) {
}
})
dspGroupsName.forEach(m => {
if (x.groupID + '' === m._id + '' && x.accountID === m.accountID) {
item.groupID = m._id
item.popover = {
sexlist: m.sexlist,
agelist: m.agelist,
......@@ -868,6 +1136,18 @@ app.post('/getCheckNote', async function (req, res) {
if (m.operator) {
item.popover.operator = m.operator
}
if (m.interestlist) {
item.popover.interestlist = m.interestlist
}
if (m.hostlist) {
item.popover.hostlist = m.hostlist
}
if (m.applist) {
item.popover.applist = m.applist
}
item.popover.meta = m.meta || '无'
}
})
if (operatorId + '' === '联通' + '' && (item.popover.operator === undefined || item.popover.operator === '联通' + '')) {
......@@ -899,8 +1179,208 @@ app.post('/getCheckNote', async function (req, res) {
dataArr.push(item)
}
}
item = {}
})
// 获取麦田
let oem_mtty_comapnyName = await db_oem_mtty.collection('account').find({}).sort({ 'date': -1 }).toArray()
let oem_mtty_msgTagName = await db_oem_mtty.collection('msgTemps').find().sort({ 'date': -1 }).toArray()
let oem_mtty_dspGroupsName = await db_oem_mtty.collection('dspGroups').find().sort({ 'date': -1 }).toArray()
let oem_mtty_dspTask = await db_oem_mtty.collection('dspTask').find({ 'createdAt': { $gte: startTime, $lte: endTime }, 'oemCheckStatus': 1 }).sort({ 'date': -1 }).toArray()
oem_mtty_dspTask.forEach(x => {
let item = {}
item.taskID = x._id
item.oem = x.oem || '麦田'
item.taskName = x.taskName
item.accountID = x.accountID
item.sendTime = moment(x.sendTime).format('YYYY-MM-DD HH:mm:ss')
item.preSendNum = x.nums
if (x.sendNum === null) {
item.sendNum = 0
} else {
item.sendNum = x.sendNum
}
item.createdAt = moment(x.createdAt).format('YYYY-MM-DD HH:mm:ss')
oem_mtty_comapnyName.forEach(y => {
if (x.accountID + '' === y._id + '') {
item.companyName = y.company
}
})
oem_mtty_msgTagName.forEach(z => {
if (x.templateId + '' === z._id + '' && x.accountID + '' === z.accountID + '') {
item.msgName = z.name
item.msgContent = z.content
}
})
oem_mtty_dspGroupsName.forEach(m => {
if (x.groupID + '' === m._id + '') {
item.groupID = m._id
// console.log(m)
item.popover = {
sexlist: m.sexlist,
agelist: m.agelist,
businesstypelist: m.businesstypelist,
phonelist: m.phonelist,
opsystemlist: m.opsystemlist,
consumelist: m.consumelist,
flowlist: m.flowlist,
citylist: m.citylist,
hobbylist: m.hobbylist
}
if (m.operator) {
item.popover.operator = m.operator
}
if (m.interestlist) {
item.popover.interestlist = m.interestlist
}
if (m.hostlist) {
item.popover.hostlist = m.hostlist
}
if (m.applist) {
item.popover.applist = m.applist
}
item.popover.meta = m.meta || '无'
}
})
if (operatorId + '' === '联通' + '' && (item.popover.operator === undefined || item.popover.operator === '联通' + '')) {
if (x.checkStatus === 0) {
item.status = '审核未通过'
item.disable = true
} else if (x.checkStatus === 1) {
item.status = '审核通过'
item.disable = true
} else {
item.status = '未审核'
item.disable = false
}
dataArr.push(item)
} else {
if (item.popover.operator + '' === operatorId + '') {
if (x.status === 0 || x.status === undefined) {
item.status = '未审核'
item.disable = false
}
if (x.status === 1) {
item.status = '审核未通过'
item.disable = true
}
if (x.status === 2) {
item.status = '审核通过'
item.disable = true
}
dataArr.push(item)
}
}
})
// 获取喜宝
let oem_xibao_comapnyName = await db_oem_xibao.collection('account').find({}).sort({ 'date': -1 }).toArray()
let oem_xibao_msgTagName = await db_oem_xibao.collection('msgTemps').find().sort({ 'date': -1 }).toArray()
let oem_xibao_dspGroupsName = await db_oem_xibao.collection('dspGroups').find().sort({ 'date': -1 }).toArray()
let oem_xibao_dspTask = await db_oem_xibao.collection('dspTask').find({ 'createdAt': { $gte: startTime, $lte: endTime }, 'oemCheckStatus': 1 }).sort({ 'date': 1 }).toArray()
oem_xibao_dspTask.forEach(x => {
let item = {}
item.taskID = x._id
item.oem = x.oem || '喜宝'
item.taskName = x.taskName
item.accountID = x.accountID
item.sendTime = moment(x.sendTime).format('YYYY-MM-DD HH:mm:ss')
item.preSendNum = x.nums
if (x.sendNum === null) {
item.sendNum = 0
} else {
item.sendNum = x.sendNum
}
item.createdAt = moment(x.createdAt).format('YYYY-MM-DD HH:mm:ss')
oem_xibao_comapnyName.forEach(y => {
if (x.accountID + '' === y._id + '') {
item.companyName = y.company
}
})
oem_xibao_msgTagName.forEach(z => {
if (x.templateId + '' === z._id + '' && x.accountID + '' === z.accountID + '') {
item.msgName = z.name
item.msgContent = z.content
}
})
oem_xibao_dspGroupsName.forEach(m => {
if (x.groupID + '' === m._id + '' && x.accountID === m.accountID) {
item.groupID = m._id
item.popover = {
sexlist: m.sexlist,
agelist: m.agelist,
businesstypelist: m.businesstypelist,
phonelist: m.phonelist,
opsystemlist: m.opsystemlist,
consumelist: m.consumelist,
flowlist: m.flowlist,
citylist: m.citylist,
hobbylist: m.hobbylist
}
if (m.operator) {
item.popover.operator = m.operator
}
if (m.interestlist) {
item.popover.interestlist = m.interestlist
}
if (m.hostlist) {
item.popover.hostlist = m.hostlist
}
if (m.applist) {
item.popover.applist = m.applist
}
item.popover.meta = m.meta || '无'
}
})
if (operatorId + '' === '联通' + '' && (item.popover.operator === undefined || item.popover.operator === '联通' + '')) {
if (x.checkStatus === 0) {
item.status = '审核未通过'
item.disable = true
} else if (x.checkStatus === 1) {
item.status = '审核通过'
item.disable = true
} else {
item.status = '未审核'
item.disable = false
}
dataArr.push(item)
} else {
if (item.popover.operator + '' === operatorId + '') {
if (x.status === 0 || x.status === undefined) {
item.status = '未审核'
item.disable = false
}
if (x.status === 1) {
item.status = '审核未通过'
item.disable = true
}
if (x.status === 2) {
item.status = '审核通过'
item.disable = true
}
dataArr.push(item)
}
}
})
dataArr = dataArr.reverse()
let dataStatus = []
let dataTotal = dataArr.length
......@@ -942,28 +1422,59 @@ app.post('/getCheckNote', async function (req, res) {
}
})
// 向短信打标签
app.post('/creatNoteTag', async function (req, res) {
console.log(req.body)
let {groupID, interestlist, hostlist, applist, oem} = req.body
if (oem === '微聚合' || oem === null || oem === undefined) {
await db.collection('dspGroups').update({_id: mongodb.ObjectId(groupID)}, {$set: {interestlist: interestlist, hostlist: hostlist, applist: applist}})
} else if (oem === '麦田') {
await db_oem_mtty.collection('dspGroups').update({_id: mongodb.ObjectId(groupID)}, {$set: {interestlist: interestlist, hostlist: hostlist, applist: applist}})
} else {
await db_oem_xibao.collection('dspGroups').update({_id: mongodb.ObjectId(groupID)}, {$set: {interestlist: interestlist, hostlist: hostlist, applist: applist}})
}
res.send({status: 200, data: 'OK'})
})
// 短信审核
app.post('/sendCheckNote', async function (req, res) {
console.log('进入send')
console.log(req.body)
let { taskId, status, sendNum, operatorId, sessionID} = req.body
// getSession(sessionID, res)
let { taskId, status, sendNum, operatorId, oem} = req.body
if (status === 8) {
db.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'status': 0 } })
res.send({ status: 200, message: '状态已重置' })
res.send({ status: 203, message: '状态已重置' })
}
if (operatorId === '联通') {
if (operatorId === '联通' || operatorId === null || operatorId === undefined) {
await db.collection('dspTask').find({ '_id': mongodb.ObjectId(taskId) }).toArray(async (err, rep) => {
if (status === 1) {
await db.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'oemCheckStatus': 0 } })
await db.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'status': 1 } })
await db.collection('bills').update({ taskID: mongodb.ObjectId(taskId), pre: true }, { $set: { pre: false, number: 0 } })
res.send({ status: 200, message: '审核未通过' })
if (oem === '微聚合' || oem === null || oem === undefined) {
await db.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'checkStatus': 0 } })
await db.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'status': 1 } })
await db.collection('bills').update({ taskID: mongodb.ObjectId(taskId), pre: true }, { $set: { pre: false, number: 0 } })
} else if (oem === '麦田') {
await db_oem_mtty.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'checkStatus': 0 } })
await db_oem_mtty.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'status': 1 } })
await db_oem_mtty.collection('bills').update({ taskID: mongodb.ObjectId(taskId), pre: true }, { $set: { pre: false, number: 0 } })
} else {
await db_oem_xibao.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'checkStatus': 0 } })
await db_oem_xibao.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'status': 1 } })
await db_oem_xibao.collection('bills').update({ taskID: mongodb.ObjectId(taskId), pre: true }, { $set: { pre: false, number: 0 } })
}
res.send({ status: 201, message: '审核未通过' })
}
if (status === 2) {
await db.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'oemCheckStatus': 1 } })
let updateTime = new Date()
if (oem === '微聚合' || oem === null || oem === undefined) {
await db.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'checkStatus': 1, 'checkTime': updateTime } })
} else if ( oem === '麦田'){
await db_oem_mtty.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'checkStatus': 1, 'checkTime': updateTime } })
} else {
await db_oem_xibao.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'checkStatus': 1, 'checkTime': updateTime } })
}
res.send({ status: 200, message: '审核通过' })
}
})
......@@ -972,14 +1483,33 @@ app.post('/sendCheckNote', async function (req, res) {
console.log(rep)
if (!rep[0].status) {
if (status === 2) {
let setdata = await db.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'status': 2, 'sendNum': sendNum } })
await db.collection('bills').update({ taskID: mongodb.ObjectId(taskId), pre: true }, { $set: { pre: false, number: sendNum * 0.5 } });
if (oem === '微聚合' || oem === null || oem === undefined) {
await db.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'status': 2, 'sendNum': sendNum } })
await db.collection('bills').update({ taskID: mongodb.ObjectId(taskId), pre: true }, { $set: { pre: false, number: sendNum * 0.5 } });
} else if (oem === '麦田'){
await db_oem_mtty.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'status': 2, 'sendNum': sendNum } })
await db_oem_mtty.collection('bills').update({ taskID: mongodb.ObjectId(taskId), pre: true }, { $set: { pre: false, number: sendNum * 0.5 } });
} else {
await db_oem_xibao.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'status': 2, 'sendNum': sendNum } })
await db_oem_xibao.collection('bills').update({ taskID: mongodb.ObjectId(taskId), pre: true }, { $set: { pre: false, number: sendNum * 0.5 } });
}
res.send({ status: 200, message: '审核通过,短信发送中' })
}
if (status === 1) {
let setdata = await db.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'status': 1 } })
await db.collection('bills').update({ taskID: mongodb.ObjectId(taskId), pre: true }, { $set: { pre: false, number: 0 } });
res.send({ status: 200, message: '审核未通过,任务驳回' })
if (oem === '微聚合' || oem === null || oem === undefined) {
await db.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'status': 1 } })
await db.collection('bills').update({ taskID: mongodb.ObjectId(taskId), pre: true }, { $set: { pre: false, number: 0 } });
} else if (oem === '喜宝'){
await db_oem_mtty.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'status': 1} })
await db_oem_mtty.collection('bills').update({ taskID: mongodb.ObjectId(taskId), pre: true }, { $set: { pre: false, number: 0 } });
} else {
await db_oem_xibao.collection('dspTask').update({ '_id': mongodb.ObjectId(taskId) }, { $set: { 'status': 1} })
await db_oem_xibao.collection('bills').update({ taskID: mongodb.ObjectId(taskId), pre: true }, { $set: { pre: false, number: 0 } });
}
res.send({ status: 201, message: '审核未通过,任务驳回' })
}
} else {
res.send({ status: 200, message: '状态无法更改' })
......@@ -1018,6 +1548,9 @@ app.post('/getAccount', async function (req, res) {
item.company = x.company
item.phone = x.phone
item.email = x.email
item.onelevelTag = x.onelevelTag || ''
item.twolevelTag = x.twolevelTag || ''
item.tag = { onelvtag: [], twolvtag: [] }
emailArr.push(x.email)
if (choose) {
if (item.email === choose || item.email + '' === choose + '') {
......@@ -1033,19 +1566,31 @@ app.post('/getAccount', async function (req, res) {
res.send({ status: 200, data: dataArr, dataTotal: dataArrTotal, emailArr: emailArr })
})
// 向公司打标签
app.post('/makeAccountTag', async function(req, res){
console.log('进入打标签')
console.log(req.body)
let {accountID, onelevelTag, twolevelTag} = req.body
await db.collection('account').update({'_id': mongodb.ObjectId(accountID)}, {$set: {onelevelTag: onelevelTag, twolevelTag: twolevelTag}}, (err, rep) => {
if (rep) {
res.send({status: 200, data: '打入标签了'})
}
})
})
// 注销接口
app.post('/deleteAccount', async function (req, res) {
console.log('进入用户控制')
console.log(req.body)
let { accountId, status, sessionID} = req.body
// getSession(sessionID, res)
if (status === 0 || status === '0') {
await db.collection('account').update({ '_id': mongodb.ObjectId(accountId) }, { $set: { 'isDelete': true } })
res.send({ status: 200, data: '用户注销成功' })
}
if (status === 1 || status === '1') {
await db.collection('account').update({ '_id': mongodb.ObjectId(accountId) }, { $set: { 'isDelete': false } })
res.send({ status: 200, data: '用户恢复成功' })
res.send({ status: 201, data: '用户恢复成功' })
}
})
......@@ -1054,14 +1599,14 @@ app.post('/closeBtn', async function (req, res) {
console.log('进入自动备案')
console.log(req.body)
let { accountId, status, sessionID} = req.body
// getSession(sessionID, res)
if (status === 0 || status === '0') {
await db.collection('account').update({ '_id': mongodb.ObjectId(accountId) }, { $set: { 'isCloseAuto': true } })
res.send({ status: 200, data: '自动备案关闭成功' })
}
if (status === 1 || status === '1') {
await db.collection('account').update({ '_id': mongodb.ObjectId(accountId) }, { $set: { 'isCloseAuto': false } })
res.send({ status: 200, data: '自动备案开启成功' })
res.send({ status: 201, data: '自动备案开启成功' })
}
})
......@@ -1072,11 +1617,9 @@ app.post('/getSlot', async function (req, res) {
let { currentPage, pageSize, choose, sessionID} = req.body
// getSession(sessionID, res)
let company = await db.collection('account').find({}).toArray()
let slot = await db.collection('slotTemps').find().toArray()
let slot = await db.collection('slotTemps').find().sort({createdAt: -1}).toArray()
let dataArr = []
let emailArr = []
......@@ -1095,7 +1638,7 @@ app.post('/getSlot', async function (req, res) {
} else {
item.disable = true
}
item.time = moment(x.createdAt).format('YYYY-MM-DD')
item.time = moment(x.createdAt).format('YYYY-MM-DD HH:mm')
if (x.isSlotDelete) {
item.isDelete = true
} else {
......@@ -1127,7 +1670,7 @@ app.post('/getSlot', async function (req, res) {
app.post('/slotAutoRule', async function (req, res) {
console.log(req.body)
let { slotId, autoRule, sessionID} = req.body
// getSession(sessionID, res)
await db.collection('slotTemps').update({ '_id': mongodb.ObjectId(slotId) }, { $set: { 'autoRule': autoRule } })
res.send({ status: 200, message: '备案策略更改成功' })
})
......@@ -1137,14 +1680,14 @@ app.post('/deleteSlot', async function (req, res) {
console.log('进入代码位控制')
console.log(req.body)
let { slotId, status, sessionID } = req.body
// getSession(sessionID, res)
if (status === 0 || status === '0') {
await db.collection('slotTemps').update({ '_id': mongodb.ObjectId(slotId) }, { $set: { 'isSlotDelete': true } })
res.send({ status: 200, data: '代码位注销成功' })
}
if (status === 1 || status === '1') {
await db.collection('slotTemps').update({ '_id': mongodb.ObjectId(slotId) }, { $set: { 'isSlotDelete': false } })
res.send({ status: 200, data: '代码位恢复成功' })
res.send({ status: 201, data: '代码位恢复成功' })
}
})
......@@ -1153,24 +1696,50 @@ app.post('/poolData', async function (req, res) {
console.log('进入营销池数据')
console.log(req.body)
let recognition = await db.collection('marketingPool').find().toArray()
let {pageSize, currentPage, onelevelTag, twolevelTag} = req.body
let recognition = await db.collection('marketingPool').find({}).toArray()
let dataArr = []
recognition.forEach(x => {
let item = {}
item.unikey = x.unikey
item.fromEmail = x.fromEmail
item.fromCompany = x.fromCompany
item.leadTime = moment(x.leadTime).format('YYYY-MM-DD HH:mm:ss')
item.onelevelTag = x.onelevelTag || []
item.twolevelTag = x.twolevelTag || []
item.tags = x.tags
item.exportNum = x.exportNum
item.exportDataArr = x.exportDataArr
dataArr.push(item)
item.exportDataArr = x.exportDataArr
if (onelevelTag && twolevelTag ) {
item.onelevelTag.forEach(y => {
if (onelevelTag === y) {
item.twolevelTag.forEach(z => {
if (twolevelTag === z) {
dataArr.push(item)
}
})
}
})
} else if (onelevelTag && !twolevelTag) {
item.onelevelTag.forEach(n => {
if (onelevelTag === n) {
dataArr.push(item)
}
})
} else {
dataArr.push(item)
}
})
res.send({ status: 200, datas: dataArr })
let dataTotal = dataArr.length
dataArr = dataArr.reverse()
dataArr = dataArr.slice((currentPage - 1) * pageSize, pageSize * currentPage)
res.send({ status: 200, datas: dataArr, dataTotal: dataTotal})
})
// 导入
......@@ -1201,12 +1770,22 @@ app.post('/leadPool', async function (req, res) {
user = _.uniqBy(user, 'unikey')
user.forEach(x => {
let item = {}
item.unikey = x.unikey
item.slotID = x.slotID
item.pubID = x.pubID
company.forEach(y => {
item.tags = y.tags || [1, 2, 3, 4]
item.onelevelTag = [y.onelevelTag]
item.twolevelTag = [y.twolevelTag]
if (y.twolevelTag && y.onelevelTag) {
item.tags = [y.onelevelTag + '-' + y.twolevelTag]
} else if (y.onelevelTag){
item.tags = [y.onelevelTag]
} else {
item.tags = []
}
if (accountID === y._id + '') {
leadFromEmail = y.email
leadFromName = y.company
......@@ -1220,6 +1799,7 @@ app.post('/leadPool', async function (req, res) {
let leadArr = []
let filterArr = []
let updateArr = []
if (poolUser.length === 0) {
leadArr = dataArr
......@@ -1227,22 +1807,35 @@ app.post('/leadPool', async function (req, res) {
dataArr.forEach(x => {
poolUser.forEach(y => {
if (x.unikey === y.unikey) {
filterArr.push(x)
}
if (x.pubID === y.pubID && x.slotID === y.slotID) {
filterArr.push(x)
} else{
console.log(x.unikey)
updateArr.push(x)
}
}
})
})
leadArr = _.difference(dataArr, filterArr)
leadArr = _.difference(leadArr, updateArr)
}
leadArr.forEach(x => {
db.collection('marketingPool').insert({ unikey: x.unikey, tags: x.tags, fromEmail: leadFromEmail, fromCompany: leadFromName, leadTime: leadTime })
db.collection('marketingPool').insert({ unikey: x.unikey, onelevelTag: x.onelevelTag, twolevelTag: x.twolevelTag, tags: x.tags, fromEmail: leadFromEmail, fromCompany: leadFromName, leadTime: leadTime })
})
updateArr.forEach(x => {
console.log('更新')
let onelevelTag = x.onelevelTag[0]
let twolevelTag = x.twolevelTag[0]
let tags = x.tags[0]
db.collection('marketingPool').update({ unikey: x.unikey}, {$push: {onelevelTag: onelevelTag, twolevelTag: twolevelTag, tags: tags}})
})
let leadNumber = leadArr.length
let filterNumber = filterArr.length
await db.collection('leadTask').insert({ leadNumber: leadNumber, filterNumber: filterNumber, leadTime: leadTime, fromEmail: leadFromEmail, fromCompany: leadFromName })
res.send({ status: 200, message: '进去了' })
......@@ -1254,6 +1847,7 @@ app.post('/getLeadTask', async function (req, res) {
let leadTask = await db.collection('leadTask').find().toArray()
let dataArr = []
leadTask.forEach(x => {
let item = {}
item.taskID = x._id
......@@ -1264,7 +1858,7 @@ app.post('/getLeadTask', async function (req, res) {
item.leadTime = moment(x.leadTime).format('YYYY-MM-DD HH:mm:SS')
dataArr.push(item)
})
dataArr = dataArr.reverse()
res.send({ status: 200, datas: dataArr })
})
......@@ -1305,7 +1899,6 @@ app.post('/getEmail', async function (req, res) {
})
// 导出
app.post('/exprot', async function (req, res) {
console.log(req.body)
let { selectUnikeyArr, exportDataArr, selectUnikeyNumber } = req.body
......@@ -1318,22 +1911,17 @@ app.post('/exprot', async function (req, res) {
let errCount = 0
// let upsertArr = []
selectUnikeyArr.forEach(async x => {
await db.collection('marketingPool').update({ unikey: x }, { $addToSet: { exportDataArr: { $each: exportDataArr } }, $inc: { exportNum: 1 } })
exportDataArr.forEach(async y => {
// let { upsertId } = await db.collection('recognition').updateOne({unikey: x, pubID: y.accountID, slotID: y.slotID},{},{upsert: true}).catch(err => { console.log(err)})
// upsertArr.push(upsertId._id)
// await db.collection('recognition').updateMany()
await db.collection('recognition').find({ unikey: x, pubID: y.accountID, slotID: y.slotID }).toArray(async (err, response) => {
if (err) { count(err) }
if (response === [] || response.length === 0) {
await db.collection('recognition').insert({ unikey: x, pubID: y.accountID, slotID: y.slotID, updateTimestamp: exportTime, auditStatus: 0, score: 3, scoreTimestamp: exportTime, fromPool: true })
let date = moment(exportTime).format('YYYYMMDD')
await db.collection('recognition').insert({ unikey: x, pubID: y.accountID, slotID: y.slotID, updateTimestamp: exportTime, auditStatus: 0, score: 3, scoreTimestamp: exportTime, fromPool: true, date: date})
count()
} else {
count(true)
......@@ -1370,11 +1958,11 @@ app.post('/getExportTask', async function (req, res) {
item.taskID = x._id
item.exportUnikeyNumber = x.exportUnikeyNumber
item.createRecogNum = x.createRecogNum
item.exportTime = x.exportTime
item.exportTime = moment(x.exportTime).format('YYYY-MM-DD HH:mm:SS')
item.exportDataArr = x.exportDataArr
dataArr.push(item)
})
dataArr = dataArr.reverse()
res.send({ status: 200, datas: dataArr })
})
......
File added
var xlsx = require('node-xlsx');
//读取文件内容
let onelevel = {}
let twolevel = {}
let twoOK = {}
function getXlsx () {
var obj = xlsx.parse(__dirname+'/hangye.xlsx');
var excelObj=obj[0].data;
var data = [];
for(var i in excelObj){
var arr=[];
var value=excelObj[i];
var obj = {}
for(var j in value){
if (value[j]) {
data.push(value[j]);
}
}
}
for (var x = 4; x < data.length; x++) {
if (x % 2 === 0) {
if (data[x] < 30) {
onelevel[data[x]] = data[x + 1]
} else {
twolevel[data[x]] = data[x + 1]
}
}
}
}
getXlsx()
function test (x, arr) {
let t = x
let tes = new RegExp('^' + t, 'i')
console.log(tes)
for (let i in arr) {
if (tes.test(i)) {
if (i.length === t.length + 2) {
twoOK[i] = arr[i]
}
}
}
console.log(twoOK)
}
test('21', twolevel)
#!/usr/bin/env bash
eval "npm run build"
echo -e '\033[44;39m npm build over \033[0m'
eval 'docker build -t reg.yunpro.cn/remarketing/yunying:latest .'
echo -e '\033[44;39m docker build over \033[0m'
eval 'docker push reg.yunpro.cn/remarketing/yunying:latest'
echo -e '\033[44;38m push over \033[0m'
\ No newline at end of file
......@@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>list</title>
<title>再营销运营审核平台</title>
</head>
<body>
<div id="app"></div>
......
......@@ -9464,6 +9464,22 @@
"which": "1.3.0"
}
},
"node-xlsx": {
"version": "0.12.1",
"resolved": "https://registry.npmjs.org/node-xlsx/-/node-xlsx-0.12.1.tgz",
"integrity": "sha512-PMIv0Gs05zb+7ZUQIMA5Fw8eFHxT8fVieKUKMUXI5EBuCsZ56bYKeaMaBf7pBAH3cw8Xa+dGK/xaLWZaEuyfiw==",
"requires": {
"buffer-from": "1.1.0",
"xlsx": "0.12.11"
},
"dependencies": {
"buffer-from": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
"integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ=="
}
}
},
"nopt": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
......
......@@ -21,17 +21,18 @@
"cookie-parser": "^1.4.3",
"element-ui": "^2.3.6",
"express": "^4.16.3",
"file-saver": "^1.3.8",
"fs": "0.0.1-security",
"http": "0.0.0",
"moment": "^2.22.1",
"mongo": "^0.1.0",
"node-xlsx": "^0.12.1",
"path": "^0.12.7",
"qs": "^6.5.1",
"server": "^1.0.18",
"vue": "^2.5.16",
"vue-router": "^3.0.1",
"vuex": "^3.0.1",
"file-saver": "^1.3.8",
"xlsx": "^0.12.10"
},
"devDependencies": {
......
<template>
<el-container>
<el-main>
<div style='width: 50%;'>
<p style='margin: 5px 0'>邮箱:</p>
<el-input
placeholder="请输入邮箱名"
suffix-icon="el-icon-date"
v-model="OEM_email"
style='margin: 10px 0'
>
</el-input>
<p style='margin: 5px 0'>用户名:</p>
<el-input
placeholder="请输入用户名"
suffix-icon="el-icon-date"
v-model="OEM_account"
style='margin: 10px 0'
>
</el-input>
<p style='margin: 5px 0'>密码:</p>
<el-input
placeholder="请输入密码"
style='margin: 10px 0'
type='password'
prefix-icon="el-icon-search"
v-model="OEM_password">
</el-input>
<p style='margin: 5px 0'>重复密码:</p>
<el-input
placeholder="请输入再次密码"
style='margin: 10px 0'
type='password'
prefix-icon="el-icon-search"
v-model="OEM_password2">
</el-input>
<p style='margin: 5px 0'>公司名:</p>
<el-input
placeholder="请输入公司名"
style='margin: 10px 0'
prefix-icon="el-icon-search"
v-model="OEM_company">
</el-input>
</div>
<el-button type='primary' @click='creatOEM'>确定</el-button>
</el-main>
</el-container>
</template>
<script>
export default {
name: 'OEM',
data () {
return {
OEM_email: null,
OEM_account: null,
OEM_password: null,
OEM_password2: null,
OEM_company: null
}
},
methods: {
creatOEM () {
let self = this
let OEM_email = self.OEM_email
let OEM_account = self.OEM_account
let OEM_password = self.OEM_password
let OEM_company = self.OEM_company
if (self.OEM_password !== self.OEM_password2) {
this.$message.error('请确认两次密码输入相同')
} else {
fetch('/api/creatOEM', {
method: 'POST',
headers: {'Content-Type': 'application/json;charset=UTF-8'},
body: JSON.stringify({OEM_email, OEM_account, OEM_password, OEM_company})
}).then(res => { return res.json() }).then(data => {
console.log(data)
self.OEM_account = null
self.OEM_password = null
self.OEM_password2 = null
self.OEM_company = null
self.OEM_email = null
if (data.status === 200) {
this.$message({
message: 'OEM运营账号创建成功',
type: 'success'
})
}
})
}
}
}
}
</script>
<style scoped>
</style>
\ No newline at end of file
......@@ -24,6 +24,11 @@
<el-table-column label='公司名称' prop='company'></el-table-column>
<el-table-column label='账户名称' prop='email'></el-table-column>
<el-table-column label='电话' prop='phone'></el-table-column>
<el-table-column label="行业标签">
<template slot-scope='scope'>
<el-button type='text' @click='openForm(scope.row, scope.$index)' >公司标签</el-button>
</template>
</el-table-column>
<el-table-column label='自动备案'>
<template slot-scope='scope'>
<el-switch
......@@ -62,6 +67,28 @@
style="float: right;margin-top: 15px">
</el-pagination>
</el-main>
<el-dialog title='行业标签' :visible.sync='dialogVisiable' width=60%>
<el-select v-model="oneChoose" filterable clearable placeholder="请选择一级标签" @change='chooseOne'>
<el-option
v-for="(value, key) in onelevel"
:key="key"
:label="value"
:value="key">
</el-option>
</el-select>
<el-select v-model="twoChoose" filterable clearable placeholder="请选择二级标签">
<el-option
v-for="(value, key) in twoOK"
:key="key"
:label="value"
:value="key">
</el-option>
</el-select>
<div slot="footer" class="dialog-footer">
<el-button @click="closeFrom()">取 消</el-button>
<el-button type="primary" @click="makeAccountTag()">确 定</el-button>
</div>
</el-dialog>
</el-container>
</template>
......@@ -78,12 +105,21 @@
currentPage: 1,
pageSize: 10,
total: 100,
emailOptions: null
emailOptions: null,
dialogVisiable: false,
onelevel: {},
twolevel: {},
twoOK: {},
oneChoose: null,
twoChoose: null,
currentdata: null,
currentIndex: null
}
},
mounted () {
this.sessionID = sessionStorage.getItem('sessionID')
this.getData(this.currentPage, this.pageSize, this.inputValue)
this.getAccountTag()
},
computed: {
...mapGetters({
......@@ -91,6 +127,71 @@
})
},
methods: {
makeAccountTag () {
this.dialogVisiable = false
let onelevelTag = this.onelevel[this.oneChoose]
let twolevelTag = this.twolevel[this.twoChoose]
let currentdata = this.currentdata
let accountID = currentdata ? currentdata._id : row._id
console.log(onelevelTag, twolevelTag, accountID)
fetch('/api/makeAccountTag', {
method: 'POST',
headers: {'Content-Type': 'application/json;charset=UTF-8'},
body: JSON.stringify({accountID, onelevelTag, twolevelTag})
}).then(res => { return res.json() }).then(data => {
console.log(data)
})
},
chooseOne () {
let choose = this.oneChoose
this.fifterTag(choose, this.twolevel)
},
openForm (data, index) {
this.dialogVisiable = true
this.oneChoose = data.onelevelTag
this.twoChoose = data.twolevelTag
this.currentdata = data
this.currentIndex = index
},
closeFrom () {
this.dialogVisiable = false
this.onelvlist = []
this.twolvlist = []
},
fifterTag (x, arr) {
let self = this
let t = x
let dataArr = {}
let tes = new RegExp('^' + t, 'i')
console.log(tes)
for (let i in arr) {
if (tes.test(i)) {
if (i.length === t.length + 2) {
console.log(arr[i])
dataArr[i] = arr[i]
}
}
}
console.log(dataArr)
this.twoOK = dataArr
},
getAccountTag (choose) {
console.log('tag')
let self = this
let oneChoose = choose
this.dialogVisiable = false
fetch('/api/getTag', {
method: 'POST',
headers: {'Content-Type': 'application/json;charset=UTF-8'},
body: JSON.stringify()
}).then(res => {
return res.json()
}).then(data => {
console.log(data)
self.onelevel = data.onelevel
self.twolevel = data.twolevel
})
},
AutoChange (row) {
console.log(row.isCloseAuto)
console.log(row)
......@@ -129,6 +230,9 @@
self.total = data.dataTotal
self.emailOptions = data.emailArr
})
},
getTag() {
},
handleSizeChange (val) {
this.pageSize = val
......@@ -189,5 +293,20 @@
</script>
<style scoped>
.el-tag + .el-tag {
margin-left: 10px;
}
.button-new-tag {
margin-left: 10px;
height: 32px;
line-height: 30px;
padding-top: 0;
padding-bottom: 0;
}
.input-new-tag {
width: 90px;
margin-left: 10px;
vertical-align: bottom;
}
</style>
<template>
<el-container>
<el-main>
<h2>调试阶段,暂不可用</h2>
<el-card style='width: 40%;margin: 20px;font-size: 14px'>
<el-form :label-position="right" label-width="80px" :model="formLabelAlign">
<el-form-item label="邮箱">
<el-input v-model="formLabelAlign.email" placeholder="请输入邮箱"></el-input>
</el-form-item>
<!-- <el-form-item label="用户名">
<el-input v-model="formLabelAlign.name" placeholder="请输入用户名"></el-input>
</el-form-item> -->
<el-form-item label="密码">
<el-input v-model="formLabelAlign.password" placeholder="请输入密码"></el-input>
</el-form-item>
<el-form-item label="确认密码">
<el-input v-model="formLabelAlign.passwword2" placeholder="请输入再次密码"></el-input>
</el-form-item>
<el-form-item label="公司名称">
<el-input v-model="formLabelAlign.company" placeholder="请输入公司名"></el-input>
</el-form-item>
<el-button type='primary' @click='creatAgent'>确定</el-button>
</el-form>
</el-card>
</el-main>
</el-container>
</template>
<script>
export default {
name: 'OEM',
data () {
return {
formLabelAlign: {
email: '',
password: '',
password2: '',
company: ''
}
}
},
methods: {
creatAgent () {
let self = this
let form = self.formLabelAlign
if (self.formLabelAlign.password !== self.formLabelAlign.password2) {
this.$message.error('请确认两次密码输入相同')
} else {
fetch('/api/creatAgent', {
method: 'POST',
headers: {'Content-Type': 'application/json;charset=UTF-8'},
body: JSON.stringify(form)
}).then(res => { return res.json() }).then(data => {
console.log(data)
self.formLabelAlign.email = null
self.formLabelAlign.password = null
self.formLabelAlign.password2 = null
self.formLabelAlign.company = null
if (data.status === 200) {
this.$message({
message: '代理商运营账号创建成功',
type: 'success'
})
}
})
}
}
}
}
</script>
<style scoped>
</style>
\ No newline at end of file
......@@ -40,8 +40,10 @@
<el-table-column label='序号' type='index' width=50></el-table-column>
<el-table-column label='任务名称' prop='name'></el-table-column>
<el-table-column label='公司名称' prop='companyName'></el-table-column>
<el-table-column label='代理商' prop='agent'></el-table-column>
<el-table-column label='代理商账号' prop='agentEmail'></el-table-column>
<el-table-column label='时间' prop='time' ></el-table-column>
<el-table-column label='筛选标签' width=200>
<el-table-column label='筛选标签'>
<template slot-scope="scope">
<el-popover trigger="hover" placement="left">
<div>
......@@ -55,11 +57,15 @@
<p>月出帐: <span style='padding: 4px' v-for='item in scope.row.popover.consumelist'>{{item}}</span></p>
<p>平均流量: <span style='padding: 4px' v-for='item in scope.row.popover.flowlist'>{{item}}</span></p>
<p>终端品牌: <span style='padding: 4px' v-for='item in scope.row.popover.phonelist'>{{item}}</span></p>
<p v-if="scope.row.popover.hobbylist">兴趣爱好: <span style='padding: 4px' v-for='item in scope.row.popover.hobbylist'>{{mapHobby[item]}}({{item}})</span></p>
<p v-if="scope.row.popover.interestlist">关键词: <span style='padding: 4px' v-for='item in scope.row.popover.interestlist'>{{item}}</span></p>
<p v-if="scope.row.popover.hostlist">域名: <span style='padding: 4px' v-for='item in scope.row.popover.hostlist'>{{item}}</span></p>
<p v-if="scope.row.popover.applist">APP: <span style='padding: 4px' v-for='item in scope.row.popover.applist'>{{item}}</span></p>
</div>
<div>
<!-- <div>
<h4>筛选条件:</h4>
<p><sapn>访问过以下标签:</sapn> <span style='padding: 4px' v-for='item in scope.row.popover.hobbylist'>{{mapHobby[item]}}({{item}}) |</span></p>
</div>
</div> -->
<span slot="reference">
查看详情
</span>
......@@ -67,6 +73,7 @@
</template>
</el-table-column>
<el-table-column label='预计筛选用户数' prop='preNum' width=130></el-table-column>
<el-table-column label='oem' prop='oem' width=130></el-table-column>
<el-table-column label='状态' prop='status' :filters="[{ text: '审核未通过', value: '审核未通过' }, { text: '审核通过', value: '审核通过'}]" :filter-method='filterTag' filter-placement="bottom-end"></el-table-column>
<el-table-column label='操作' width=180>
<template slot-scope="scope">
......@@ -96,7 +103,9 @@
:total="total"
style="float: right;margin-top: 15px">
</el-pagination>
<el-dialog title="请添加筛选条件" :visible.sync="dialogFormVisible">
<el-dialog :visible.sync="dialogFormVisible">
<p style="font-size: 16px;font-weight: 800">请添加筛选条件</p>
<p style='margin-left:10p'> 备注: {{meta}}</p>
<div>
<el-tag
:key="tag"
......@@ -140,6 +149,28 @@
</el-input>
<el-button v-else class="button-new-tag" size="small" @click="showInput2">添加新域名</el-button>
</div>
<br>
<div>
<el-tag
:key="tag"
v-for="tag in applist"
closable
:disable-transitions="false"
@close="handleClose3(tag)">
{{tag}}
</el-tag>
<el-input
class="input-new-tag"
v-if="inputVisible3"
v-model="inputValue3"
size="small"
ref="saveTagInput3"
@keyup.enter.native="handleInputConfirm"
@blur="handleInputConfirm"
>
</el-input>
<el-button v-else class="button-new-tag" size="small" @click="showInput3">添 加 A P P</el-button>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="closeFrom()">取 消</el-button>
<el-button type="primary" @click="suerSend(1)">确 定</el-button>
......@@ -165,14 +196,18 @@
total: 0,
pageSize: 100,
currentPage: 1,
meta: '',
visible1: false,
visibleInput: false,
interestlist: [],
hostlist: [],
applist: [],
inputVisible: false,
inputVisible2: false,
inputVisible3: false,
inputValue: '',
inputValue2: '',
inputValue3: '',
dialogFormVisible: false,
valueRange: [],
startTime: '',
......@@ -232,16 +267,19 @@
methods: {
openForm (data, index) {
this.dialogFormVisible = true
console.log(data)
this.interestlist = data.popover.interestlist || []
this.hostlist = data.popover.hostlist || []
this.applist = data.popover.applist || []
this.meta = data.popover.meta || ''
this.currentdata = data
this.currentIndex = index
// scope.row.status = '审核通过'
// scope.row.disable = true
},
closeFrom () {
this.dialogFormVisible = false
this.interestlist = []
this.hostlist = []
this.applist = []
this.meta = ''
},
handleClose (tag) {
this.interestlist.splice(this.interestlist.indexOf(tag), 1)
......@@ -249,6 +287,9 @@
handleClose2 (tag) {
this.hostlist.splice(this.hostlist.indexOf(tag), 1)
},
handleClose3 (tag) {
this.hobbylist.splice(this.hobbylist.indexOf(tag), 1)
},
showInput () {
this.inputVisible = true
this.$nextTick(_ => {
......@@ -262,19 +303,32 @@
this.$refs.saveTagInput2.$refs.input.focus()
})
},
showInput3 () {
this.inputVisible3 = true
console.log(this.$refs)
this.$nextTick(_ => {
this.$refs.saveTagInput3.$refs.input.focus()
})
},
handleInputConfirm () {
let inputValue = this.inputValue
let inputValue2 = this.inputValue2
let inputValue3 = this.inputValue3
if (inputValue) {
this.interestlist.push(inputValue)
}
if (inputValue2) {
this.hostlist.push(inputValue2)
}
if (inputValue3) {
this.applist.push(inputValue3)
}
this.inputVisible = false
this.inputVisible2 = false
this.inputVisible3 = false
this.inputValue = ''
this.inputValue2 = ''
this.inputValue3 = ''
},
handleCommand (command) {
console.log(command)
......@@ -347,15 +401,16 @@
let self = this
let interestlist = this.interestlist
let hostlist = this.hostlist
let applist = this.applist
let currentdata = this.currentdata
let sessionID = this.sessionID
let oem = currentdata ? currentdata.oem : row.oem
let taskId = currentdata ? currentdata.name : row.name
let groupId = currentdata ? currentdata.groupID : row.groupID
this.dialogFormVisible = false
fetch('/api/send', {
method: 'POST',
headers: {'Content-Type': 'application/json;charset=UTF-8'},
body: JSON.stringify({taskId, groupId, interestlist, hostlist, status, sessionID})
body: JSON.stringify({taskId, groupId, interestlist, hostlist, applist, status, oem})
}).then(res => {
return res.json()
}).then(data => {
......
......@@ -3,7 +3,7 @@
<el-header>
<h4>短信审核</h4>
</el-header>
<el-main>
<el-main style="font-size: 12px">
<el-row>
<el-date-picker
v-model="valueRange"
......@@ -47,6 +47,8 @@
<el-table-column label='序号' type='index' width=50></el-table-column>
<el-table-column label='任务名称' prop='taskName'></el-table-column>
<el-table-column label='公司名称' prop='companyName'></el-table-column>
<el-table-column label='代理商' prop='agent'></el-table-column>
<el-table-column label='代理商账号' prop='agentEmail'></el-table-column>
<el-table-column label='提交时间' prop='createdAt'></el-table-column>
<el-table-column label='筛选标签'>
<template slot-scope="scope">
......@@ -60,7 +62,10 @@
<p>平均消费: <span style='padding: 4px' v-for='item in scope.row.popover.consumelist'>{{item}}</span></p>
<p>平均流量: <span style='padding: 4px' v-for='item in scope.row.popover.flowlist'>{{item}}</span></p>
<p>所在城市: <span style='padding: 4px' v-for='item in scope.row.popover.citylist'>{{item}}</span></p>
<p>兴趣爱好: <span style='padding: 4px' v-for='item in scope.row.popover.hobbylist'>{{mapHobby[item]}}({{item}})</span></p>
<p v-if="scope.row.popover.hobbylist">兴趣爱好: <span style='padding: 4px' v-for='item in scope.row.popover.hobbylist'>{{mapHobby[item]}}({{item}})</span></p>
<p v-if="scope.row.popover.interestlist">关键词: <span style='padding: 4px' v-for='item in scope.row.popover.interestlist'>{{item}}</span></p>
<p v-if="scope.row.popover.hostlist">域名: <span style='padding: 4px' v-for='item in scope.row.popover.hostlist'>{{item}}</span></p>
<p v-if="scope.row.popover.applist">APP: <span style='padding: 4px' v-for='item in scope.row.popover.applist'>{{item}}</span></p>
<p>标签持续时间: <span style='padding: 4px'>30天</span></p>
<span slot="reference">
查看详情
......@@ -68,9 +73,15 @@
</el-popover>
</template>
</el-table-column>
<el-table-column label='添加标签'>
<template slot-scope="scope">
<el-button type='text' size='small' @click="openForm(scope.row, scope.$index)" :disabled='scope.row.disable'>添加标签</el-button>
</template>
</el-table-column>
<el-table-column label='预计发送数量' prop='preSendNum'></el-table-column>
<el-table-column label='短信内容' prop='msgContent'></el-table-column>
<el-table-column label='预计发送时间' prop='sendTime'></el-table-column>
<el-table-column label='oem' prop='oem'></el-table-column>
<el-table-column label='实际发送数量' prop='sendNum' v-if="operatorId !== '联通'"></el-table-column>
<el-table-column label='审核状态' prop='status' :filters="[{ text: '未审核', value: '未审核' }, { text: '审核通过', value: '审核通过' }, { text: '审核不通过', value: '审核未通过'}]" :filter-method='filterTag' filter-placement="bottom-end"></el-table-column>
<el-table-column label='操作' width=150>
......@@ -124,6 +135,79 @@
style="float: right;margin-top: 15px">
</el-pagination>
</el-main>
<el-dialog :visible.sync="dialogFormVisible">
<p style="font-size: 16px;font-weight: 800">请添加筛选条件</p>
<p style='margin-left:10p'> 备注: {{meta}}</p>
<div>
<el-tag
:key="tag"
v-for="tag in interestlist"
closable
:disable-transitions="false"
@close="handleClose(tag)">
{{tag}}
</el-tag>
<el-input
class="input-new-tag"
v-if="inputVisible"
ref="saveTagInput"
v-model="inputValue"
size="small"
@keyup.enter.native="handleInputConfirm"
@blur="handleInputConfirm"
>
</el-input>
<el-button v-else class="button-new-tag" size="small" @click="showInput">添加关键词</el-button>
</div>
<br>
<div>
<el-tag
:key="tag"
v-for="tag in hostlist"
closable
:disable-transitions="false"
@close="handleClose2(tag)">
{{tag}}
</el-tag>
<el-input
class="input-new-tag"
v-if="inputVisible2"
v-model="inputValue2"
size="small"
ref="saveTagInput2"
@keyup.enter.native="handleInputConfirm"
@blur="handleInputConfirm"
>
</el-input>
<el-button v-else class="button-new-tag" size="small" @click="showInput2">添加新域名</el-button>
</div>
<br>
<div>
<el-tag
:key="tag"
v-for="tag in applist"
closable
:disable-transitions="false"
@close="handleClose3(tag)">
{{tag}}
</el-tag>
<el-input
class="input-new-tag"
v-if="inputVisible3"
v-model="inputValue3"
size="small"
ref="saveTagInput3"
@keyup.enter.native="handleInputConfirm"
@blur="handleInputConfirm"
>
</el-input>
<el-button v-else class="button-new-tag" size="small" @click="showInput3">添 加 A P P</el-button>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="closeFrom()">取 消</el-button>
<el-button type="primary" @click="creatNoteTag()">确 定</el-button>
</div>
</el-dialog>
</el-container>
</template>
......@@ -139,7 +223,7 @@
url: '/api/getCheckNote',
statue: '未审核',
choose: '任务审核状态',
chooseId: 'all',
chooseId: 'zero',
operatorId: '联通',
total: 0,
pageSize: 100,
......@@ -184,7 +268,22 @@
}
}]
},
mapHobby: {"H001002":"时政要闻", "H001006":"科技资讯", "H001011":"社会资源", "H004011":"旅游出行", "H001008":"财经资讯", "H001005":"军事资讯", "H007012":"电子邮件", "H002008":"专业协会", "H002009":"社交网络", "H004020":"团购打折", "H001012":"综合资讯", "H002999":"通信交流", "H003006":"娱乐搞笑", "H001003":"女性时尚", "H007009":"网络存储", "H004015":"非法网站", "H007004":"系统工具", "H003005":"手机动漫", "H004018":"打车软件", "H004019":"查询服务", "H005010":"营销平台", "H001999":"新闻资讯", "H004009":"医疗健康","H004003":"搜索引擎", "H004005":"生活综合", "H003008":"网络电台", "H004023":"时尚美妆", "H002001":"即时通信", "H004999":"生活服务", "H004021":"福利彩票", "H007008":"应用商店", "H005002":"电子支付", "H004004":"导航网站", "H004012":"物流快递", "H004006":"家居服务", "H007999":"工具软件", "H001010":"企业门户", "H007002":"下载工具","H007006":"词典翻译", "H007007":"主题桌面", "H005009":"求职招聘", "H002002":"婚恋交友", "H004008":"母婴资讯","H004022":"教育学习", "H003009":"影院票务", "H004007":"汽车信息", "H001004":"体育资讯", "H003002":"手机阅读", "H003003":"手机音频", "H004014":"宠物资讯", "H001009":"文化教育", "H004013":"餐饮美食", "H005013":"金融理财", "H004002":"时间天气", "H005008":"商务办公", "H003004":"手机游戏", "H001007":"娱乐资讯", "H004016":"外卖送餐", "H002006":"博客空间", "H003001":"手机视频", "H003007":"摄影图片", "H005001":"网上购物", "H002005":"社区论坛", "H007001":"安全杀毒", "H005012":"手机银行", "H003999":"娱乐休闲", "H004017":"地图导航", "H007011":"无线管理","H007005":"输入法 ","H007003":"浏览器 ","H005011":"云服务 "}
mapHobby: {"H001002":"时政要闻", "H001006":"科技资讯", "H001011":"社会资源", "H004011":"旅游出行", "H001008":"财经资讯", "H001005":"军事资讯", "H007012":"电子邮件", "H002008":"专业协会", "H002009":"社交网络", "H004020":"团购打折", "H001012":"综合资讯", "H002999":"通信交流", "H003006":"娱乐搞笑", "H001003":"女性时尚", "H007009":"网络存储", "H004015":"非法网站", "H007004":"系统工具", "H003005":"手机动漫", "H004018":"打车软件", "H004019":"查询服务", "H005010":"营销平台", "H001999":"新闻资讯", "H004009":"医疗健康","H004003":"搜索引擎", "H004005":"生活综合", "H003008":"网络电台", "H004023":"时尚美妆", "H002001":"即时通信", "H004999":"生活服务", "H004021":"福利彩票", "H007008":"应用商店", "H005002":"电子支付", "H004004":"导航网站", "H004012":"物流快递", "H004006":"家居服务", "H007999":"工具软件", "H001010":"企业门户", "H007002":"下载工具","H007006":"词典翻译", "H007007":"主题桌面", "H005009":"求职招聘", "H002002":"婚恋交友", "H004008":"母婴资讯","H004022":"教育学习", "H003009":"影院票务", "H004007":"汽车信息", "H001004":"体育资讯", "H003002":"手机阅读", "H003003":"手机音频", "H004014":"宠物资讯", "H001009":"文化教育", "H004013":"餐饮美食", "H005013":"金融理财", "H004002":"时间天气", "H005008":"商务办公", "H003004":"手机游戏", "H001007":"娱乐资讯", "H004016":"外卖送餐", "H002006":"博客空间", "H003001":"手机视频", "H003007":"摄影图片", "H005001":"网上购物", "H002005":"社区论坛", "H007001":"安全杀毒", "H005012":"手机银行", "H003999":"娱乐休闲", "H004017":"地图导航", "H007011":"无线管理","H007005":"输入法 ","H007003":"浏览器 ","H005011":"云服务 "},
meta: '',
visible1: false,
visibleInput: false,
interestlist: [],
hostlist: [],
applist: [],
inputVisible: false,
inputVisible2: false,
inputVisible3: false,
inputValue: '',
inputValue2: '',
inputValue3: '',
dialogFormVisible: false,
currentdata: null,
currentIndex: null
}
},
mounted () {
......@@ -200,6 +299,76 @@
})
},
methods: {
openForm (data, index) {
this.interestlist = []
this.hostlist = []
this.applist = []
this.dialogFormVisible = true
this.interestlist = data.popover.interestlist || []
this.hostlist = data.popover.hostlist || []
this.applist = data.popover.applist || []
this.meta = data.popover.meta || ''
this.currentdata = data
this.currentIndex = index
},
closeFrom () {
this.dialogFormVisible = false
this.interestlist = []
this.hostlist = []
this.applist = []
this.meta = ''
this.currentdata = null
this.currentIndex = null
},
handleClose (tag) {
this.interestlist.splice(this.interestlist.indexOf(tag), 1)
},
handleClose2 (tag) {
this.hostlist.splice(this.hostlist.indexOf(tag), 1)
},
handleClose3 (tag) {
this.hobbylist.splice(this.hobbylist.indexOf(tag), 1)
},
showInput () {
this.inputVisible = true
this.$nextTick(_ => {
this.$refs.saveTagInput.$refs.input.focus()
})
},
showInput2 () {
this.inputVisible2 = true
console.log(this.$refs)
this.$nextTick(_ => {
this.$refs.saveTagInput2.$refs.input.focus()
})
},
showInput3 () {
this.inputVisible3 = true
console.log(this.$refs)
this.$nextTick(_ => {
this.$refs.saveTagInput3.$refs.input.focus()
})
},
handleInputConfirm () {
let inputValue = this.inputValue
let inputValue2 = this.inputValue2
let inputValue3 = this.inputValue3
if (inputValue) {
this.interestlist.push(inputValue)
}
if (inputValue2) {
this.hostlist.push(inputValue2)
}
if (inputValue3) {
this.applist.push(inputValue3)
}
this.inputVisible = false
this.inputVisible2 = false
this.inputVisible3 = false
this.inputValue = ''
this.inputValue2 = ''
this.inputValue3 = ''
},
chooseOperator (command) {
let self = this
console.log(command)
......@@ -260,6 +429,7 @@
suerSend (row, taskId, status, sendNum) {
let self = this
let operatorId = self.operatorId
let oem = row.oem
if (operatorId !== '联通') {
if (sendNum === null || sendNum === undefined) {
sendNum = row.preSendNum
......@@ -279,14 +449,14 @@
if (status === 1) {
console.log('不通过')
row.visible1 = false
row.sendNum = 0
row.sendNum = 0
row.status = '审核未通过'
row.disable = true
}
fetch('/api/sendCheckNote', {
method: 'POST',
headers: {'Content-Type': 'application/json;charset=UTF-8'},
body: JSON.stringify({taskId, status, sendNum, operatorId, sessionID: self.sessionID})
body: JSON.stringify({taskId, status, sendNum, operatorId, oem})
}).then(res => { return res.json() }).then(data => {
console.log(data)
self.$message({
......@@ -320,7 +490,7 @@
fetch('/api/sendCheckNote', {
method: 'POST',
headers: {'Content-Type': 'application/json;charset=UTF-8'},
body: JSON.stringify({taskId, status, sendNum, operatorId, sessionID: self.sessionID})
body: JSON.stringify({taskId, status, sendNum, operatorId, oem})
}).then(res => { return res.json() }).then(data => {
console.log(data)
self.$message({
......@@ -353,11 +523,48 @@
}).catch(err => {
console.log(err)
})
},
creatNoteTag () {
let self = this
let interestlist = this.interestlist
let hostlist = this.hostlist
let applist = this.applist
let currentdata = this.currentdata
let oem = currentdata ? currentdata.oem : row.oem
let groupID = currentdata ? currentdata.groupID : row.groupID
this.dialogFormVisible = false
fetch('/api/creatNoteTag', {
method: 'POST',
headers: {'Content-Type': 'application/json;charset=UTF-8'},
body: JSON.stringify({groupID, interestlist, hostlist, applist, oem})
}).then(res => {
return res.json()
}).then(data => {
console.log(data)
self.currentdata.popover.applist = applist
this.$set(self.datas, self.currentIndex, self.currentdata)
this.currentdata = null
this.currentIndex = null
})
}
}
}
</script>
<style scoped>
.el-tag + .el-tag {
margin-left: 10px;
}
.button-new-tag {
margin-left: 10px;
height: 32px;
line-height: 30px;
padding-top: 0;
padding-bottom: 0;
}
.input-new-tag {
width: 90px;
margin-left: 10px;
vertical-align: bottom;
}
</style>
......@@ -43,7 +43,7 @@
methods: {
showExportContent (row) {
console.log(row)
this.exprotContent = row.exportShowArr
this.exprotContent = row.exportDataArr
this.exportContentVisible = true
},
getData () {
......
......@@ -114,10 +114,10 @@
<el-submenu index=7 v-if=' sessionID === "admin" '>
<template slot='title'>
<i class='el-icon-setting'></i>
<span>OEM运营账号</span>
<span>代理商运营账号</span>
</template>
<el-menu-item index='/OEM' @click="routeTo">
创建OME运营账号
<el-menu-item index='/agent' @click="routeTo">
创建代理商运营账号
</el-menu-item>
</el-submenu>
......
<template>
<el-container>
<el-main>
<div class="title">
<p>运营审核平台</p>
</div>
<div style='margin: 100px auto'>
<el-row type="flex" justify="center" style="width: 100%;height: 100%">
<el-col :span="12">
......@@ -78,5 +81,12 @@
</script>
<style scoped>
.title {
font-size: 24px;
font-weight: 800;
text-align: center;
width: 100%;
margin: 40px auto;
letter-spacing: 3px;
}
</style>
......@@ -25,6 +25,7 @@
<el-table-column label='公司名称' prop='company'></el-table-column>
<el-table-column label='代码位名称' prop='slotName'></el-table-column>
<el-table-column label='代码位位置' prop='slot'></el-table-column>
<el-table-column label='代码位创建时间' prop='time'></el-table-column>
<el-table-column label='代码位备案规则'>
<template slot-scope='scope'>
<el-button type='text' @click='openDialog(scope)' >备案规则</el-button>
......
......@@ -6,6 +6,22 @@
<el-main>
<el-row style='margin-bottom: 10px'>
<el-button type='primary' style='float: left' @click=' inDialogVisible = true'>导入任务</el-button>
<el-select v-model="oneChoose" filterable clearable placeholder="请选择一级标签" @change='chooseOne' style="margin-left: 10px">
<el-option
v-for="(value, key) in onelevel"
:key="key"
:label="value"
:value="key">
</el-option>
</el-select>
<el-select v-model="twoChoose" filterable clearable placeholder="请选择二级标签" @change="chooseTwo">
<el-option
v-for="(value, key) in twoOK"
:key="key"
:label="value"
:value="key">
</el-option>
</el-select>
<el-button type='primary' style='float: right' @click='openExportDialog'>导出任务</el-button>
</el-row>
<el-table border
......@@ -29,7 +45,16 @@
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[10, 20, 50, 100, 1000]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
style="float: right;margin-top: 15px">
</el-pagination>
<el-dialog title='新建导入任务' center :visible.sync="inDialogVisible">
<el-row style='margin-bottom: 10px'>
<el-col :span="4" style='line-height: 40px'>任务模式</el-col>
......@@ -98,7 +123,7 @@
<el-col :span='2'><el-button type='text' size='mini' @click='deleteShow(index)'>删除</el-button></el-col>
</el-row>
<el-row>
<el-select v-model="exportAccount" placeholder="请选择账户" @visible-change='selectSlot'>
<el-select v-model="exportAccount" placeholder="请选择账户" filterable clearable @visible-change='selectSlot'>
<el-option
v-for="item in emailOptions"
:key="item.accountID"
......@@ -106,7 +131,7 @@
:value="item.accountID">
</el-option>
</el-select>
<el-select v-model="exportSlot" placeholder="请选择代码位">
<el-select v-model="exportSlot" placeholder="请选择代码位" clearable filterable>
<el-option
v-for="item in slotOptions"
:key="item.slotID"
......@@ -206,13 +231,22 @@
exportShowArr: [],
showEmail: null,
showSlot: null,
exprotContent: []
exprotContent: [],
oneChoose: null,
twoChoose: null,
onelevel: {},
twolevel: {},
twoOK: {},
currentPage: 1,
pageSize: 10,
total: 1000
}
},
mounted () {
this.getTime()
this.getData()
this.getEmail()
this.getAccountTag()
},
methods: {
openExportDialog () {
......@@ -223,6 +257,32 @@
self.exportDialogVisible = true
}
},
chooseOne () {
let choose = this.oneChoose
this.fifterTag(choose, this.twolevel)
this.twoChoose = null
this.getData(this.pageSize, this.currentPage, this.oneChoose, this.twoChoose)
},
chooseTwo () {
this.getData(this.pageSize, this.currentPage, this.oneChoose, this.twoChoose)
},
fifterTag (x, arr) {
let self = this
let t = x
let dataArr = {}
let tes = new RegExp('^' + t, 'i')
console.log(tes)
for (let i in arr) {
if (tes.test(i)) {
if (i.length === t.length + 2) {
console.log(arr[i])
dataArr[i] = arr[i]
}
}
}
console.log(dataArr)
this.twoOK = dataArr
},
showExportContent (row) {
console.log(row)
this.exprotContent = row.exportDataArr
......@@ -251,9 +311,26 @@
}
})
this.exportDataArr.push({accountID: this.exportAccount, slotID: this.exportSlot, accountName: this.showEmail, slotName: this.showSlot})
this.exportAccount = null
this.exportSlot = null
let noRepeat = true
self.exportDataArr.forEach(x => {
// console.log(x)
if (x.accountID === self.exportAccount && x.slotID === self.exportSlot) {
this.$message({
showClose: true,
message: '请不要向同一账号下同一代码位导入相同的用户',
type: 'error'
})
noRepeat = false
}
})
if (noRepeat) {
self.exportDataArr.push({accountID: self.exportAccount, slotID: self.exportSlot, accountName: self.showEmail, slotName: self.showSlot})
self.exportAccount = null
self.exportSlot = null
}
},
handleSelectionChange (valueArr) {
console.log(valueArr)
......@@ -306,17 +383,49 @@
})
}
},
getData () {
handleSizeChange (val) {
console.log('页容量改变')
console.log(val)
this.pageSize = val
this.getData(this.pageSize, this.currentPage, this.chooseOne, this.twoChoose)
},
handleCurrentChange (val) {
console.log('当前页码改变')
this.currentPage = val
console.log(val)
this.getData(this.pageSize, this.currentPage, this.chooseOne, this.twoChoose)
},
getData (pageSize = this.pageSize, currentPage = this.currentPage, oneChoose = this.oneChoose, twoChoose = this.twoChoose) {
let self = this
let onelevelTag = this.onelevel[oneChoose]
let twolevelTag = this.twolevel[twoChoose]
fetch('/api/poolData', {
method: 'POST',
headers: {'Content-Type': 'application/json;charset=UTF-8'},
body: JSON.stringify({})
body: JSON.stringify({pageSize, currentPage, onelevelTag, twolevelTag})
}).then(res => { return res.json() }).then(data => {
console.log(data)
self.datas = data.datas
self.total = data.dataTotal
})
},
getAccountTag (choose) {
console.log('tag')
let self = this
let oneChoose = choose
this.dialogVisiable = false
fetch('/api/getTag', {
method: 'POST',
headers: {'Content-Type': 'application/json;charset=UTF-8'},
body: JSON.stringify()
}).then(res => {
return res.json()
}).then(data => {
console.log(data)
self.onelevel = data.onelevel
self.twolevel = data.twolevel
})
},
getEmail () {
let self = this
let accountID = self.exportAccount
......
......@@ -16,7 +16,7 @@ import distributor from '@/components/distributor'
import userPool from '@/components/userPool'
import leadPoolTask from '@/components/leadPoolTask'
import exportPoolTask from '@/components/exportPoolTask'
import OEM from '@/components/OEM'
import agent from '@/components/agent'
import welcome from '@/components/welcome'
Vue.use(Router)
......@@ -44,7 +44,7 @@ export default new Router({
{name: 'leadPoolTask', path: '/leadPoolTask', meta: {requiresId: false}, component: leadPoolTask},
{name: 'exportPoolTask', path: '/exportPoolTask', meta: {requiresId: false}, component: exportPoolTask},
{name: 'distributor', path: '/distributor', meta: {requiresId: false}, component: distributor},
{name: 'OEM', path: '/OEM', meta: {requiresId: false}, component: OEM}
{name: 'agent', path: '/agent', meta: {requiresId: false}, component: agent}
]
},
{
......
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