Merge branch 'master' into dev

This commit is contained in:
yulixing 2019-08-19 15:08:37 +08:00
commit b34c2d3df2
3 changed files with 350 additions and 73 deletions

View File

@ -0,0 +1,231 @@
// 获取单个游戏广告位
import {Router} from 'express'
import axios from 'axios'
import config from '../../../config/config'
const router = new Router()
const gameReportApiUrl = config.game_report
// 获取游戏日报
router.get('/report', async (req, res, next) => {
// 权限判断
const hasPerm =
req.user.permissions.includes(`${req.query.uid}-readable`) ||
req.user.permissions.includes(`${req.query.uid}-edit`) ||
req.user.permissions.includes(`${req.query.uid}-publish`) ||
req.user.permissions.includes(`games-writeable`)
if (!hasPerm) {
res.status(403).send({
errcode: 1,
errmsg: '用户无此游戏数据查看权限!',
})
return
}
const query = req.query
const game_id = parseInt(query.game_id)
const platform_id = parseInt(query.platform_id)
const date = query.date
const isNew = parseInt(query.isNew)
try {
const categoryRes = await axios({
url: gameReportApiUrl,
method: 'get',
params: {
c: 'Ops',
a: 'descField',
body: JSON.stringify({
gameid: game_id,
channel: platform_id,
}),
},
})
if (categoryRes.data.errcode === 0) {
const categoryInfo = categoryRes.data.result
const category = []
for (const key in categoryInfo) {
if (categoryInfo.hasOwnProperty(key)) {
category.push(key)
}
}
if (category.length === 0) {
res.send({
errcode: 404,
errmsg: '暂无数据!',
})
return
}
const getDataArr = []
category.map(item => {
getDataArr.push(
getCategoryData(item, date, isNew, game_id, platform_id)
)
})
const dataArr = await Promise.all(getDataArr)
const allData = Object.assign(...dataArr)
const result = {}
for (const key in categoryInfo) {
if (categoryInfo.hasOwnProperty(key)) {
const cate = categoryInfo[key]
result[key] = []
for (let i = 0; i < cate.length; i++) {
const field = cate[i]
const fieldName = field.name
if (fieldName.endsWith('_%')) {
let idx = 1
let tempName = fieldName.replace(/%/, idx)
while (allData[tempName]) {
const obj = JSON.parse(JSON.stringify(field))
obj.name = tempName
obj.explan += `_${idx}`
obj.value = allData[tempName]
result[key].push(obj)
idx++
tempName = fieldName.replace(/%/, idx)
}
} else {
field.value = allData[fieldName]
result[key].push(field)
}
}
}
}
res.send({
errcode: 0,
result: result,
})
} else {
res.send({
errcode: categoryRes.errcode,
errmsg: categoryRes.errmsg,
})
return
}
} catch (err) {
next(err)
}
})
function getCategoryData(cateName, date, is_new, game_id, platform_id) {
return new Promise(async (resolve, reject) => {
const dataRes = await axios({
url: gameReportApiUrl,
method: 'get',
params: {
c: 'Ops',
a: 'gameReport',
body: JSON.stringify({
gameid: game_id,
channel: platform_id,
times: date,
is_new: is_new,
category: cateName,
}),
},
})
if (dataRes.data.errcode === 0) {
const data = dataRes.data.result
resolve(data)
} else {
reject({
errcode: 404,
errmsg: '数据获取失败,暂无数据!',
})
}
})
}
// 获取游戏数据(画图表用)
router.get('/game-data', async (req, res, next) => {
// 权限判断
const hasPerm =
req.user.permissions.includes(`${req.query.uid}-readable`) ||
req.user.permissions.includes(`${req.query.uid}-edit`) ||
req.user.permissions.includes(`${req.query.uid}-publish`) ||
req.user.permissions.includes(`games-writeable`)
if (!hasPerm) {
res.status(403).send({
errcode: 1,
errmsg: '用户无此游戏数据查看权限!',
})
return
}
const query = req.query
console.log(query)
const gameid = parseInt(query.gameid)
const channelid = parseInt(query.channelid)
const ad_channelid = query.ad_channelid
const method = query.method
const time_partice = parseInt(query.time_partice)
const time_begin = query.isNew
const time_end = query.isNew
try {
// TODO: 接口对接
// const searchRes = await axios({
// url: gameReportApiUrl,
// method: 'get',
// params: {
// c: 'Ops',
// a: 'descField',
// body: JSON.stringify({
// gameid: game_id,
// channel: platform_id,
// }),
// },
// })
// if (searchRes.data.errcode === 0) {
// res.send({
// errcode: 0,
// errmsg: '',
// message: {
// totoal: 2,
// result: [
// {
// '2019-08-01 01:00:00': 100,
// '2019-08-01 02:00:00': 120,
// },
// ],
// },
// })
// } else {
// res.send({
// errcode: searchRes.errcode,
// errmsg: searchRes.errmsg,
// })
// }
// TODO: 数据示例
res.send({
errcode: 0,
errmsg: '',
message: {
totoal: 2,
result: [
{
'2019-08-01 01:00:00': 100,
'2019-08-01 02:00:00': 120,
},
],
},
})
} catch (err) {
next(err)
}
})
export default router

View File

@ -1,6 +1,9 @@
// 获取单个游戏广告位
import {Router} from 'express'
import axios from 'axios'
import GameItem from '../../models/admin/GameItem'
import config from '../../../config/config'
const router = new Router()
@ -27,120 +30,162 @@ router.get('/report', async (req, res, next) => {
/* 权限验证 end */
const query = req.query
const game_id = parseInt(query.game_id)
const platform_id = parseInt(query.platform_id)
const game_id = query.game_id
const platform_id = query.platform_id
const date = query.date
const isNew = parseInt(query.isNew)
try {
const categoryInfo = {}
const methods = []
const result = []
const itemList = {}
const dataOpt = {
gameid: game_id,
channelid: platform_id,
times: date,
}
// 获取道具列表
const itemListRes = await GameItem.find({game_id: game_id})
itemListRes.forEach(item => {
itemList[item.item_id] = item.item_name
})
// 请求数据分类及字段定义
const categoryRes = await axios({
url: gameReportApiUrl,
method: 'get',
params: {
c: 'Ops',
a: 'descField',
body: JSON.stringify({
gameid: game_id,
channel: platform_id,
}),
a: 'getmethods',
gameid: game_id,
channelid: platform_id,
},
})
const category = categoryRes.data.result
if (categoryRes.data.errcode === 0) {
const categoryInfo = categoryRes.data.result
const category = []
for (const key in categoryInfo) {
if (categoryInfo.hasOwnProperty(key)) {
category.push(key)
}
category.map(item => {
if (!categoryInfo[item.methods]) {
categoryInfo[item.methods] = {}
categoryInfo[item.methods].fields = {}
categoryInfo[item.methods].fields_order = {}
categoryInfo[item.methods].order = ''
categoryInfo[item.methods].method_name = item.method_display
methods.push(item.methods)
}
if (category.length === 0) {
res.send({
errcode: 404,
errmsg: '暂无数据!',
if (item.need_sort) categoryInfo[item.methods].order = item.fields
categoryInfo[item.methods].fields[item.fields] = item.comment
categoryInfo[item.methods].fields_order[item.fields] = item.sort_num
})
// 请求各类数据
const getMethodDataArr = []
methods.forEach(method => {
getMethodDataArr.push(getMethodData(method, dataOpt))
})
const methodDataRes = await Promise.all(getMethodDataArr)
methodDataRes.forEach(item => {
const methodData = categoryInfo[item.method]
// // 排序
if (methodData.order) {
const orderField = methodData.order
item.data.sort(function(a, b) {
a = JSON.parse(a)
b = JSON.parse(b)
return a[orderField] >= b[orderField] ? 1 : -1
})
return
} else {
item.data.sort()
}
const getDataArr = []
const fields_name = []
const records = []
category.map(item => {
getDataArr.push(
getCategoryData(item, date, isNew, game_id, platform_id)
)
})
const dataArr = await Promise.all(getDataArr)
const allData = Object.assign(...dataArr)
const result = {}
for (const key in categoryInfo) {
if (categoryInfo.hasOwnProperty(key)) {
const cate = categoryInfo[key]
result[key] = []
for (let i = 0; i < cate.length; i++) {
const field = cate[i]
const fieldName = field.name
if (fieldName.endsWith('_%')) {
let idx = 1
let tempName = fieldName.replace(/%/, idx)
while (allData[tempName]) {
const obj = JSON.parse(JSON.stringify(field))
obj.name = tempName
obj.explan += `_${idx}`
obj.value = allData[tempName]
result[key].push(obj)
idx++
tempName = fieldName.replace(/%/, idx)
}
if (item.data[0]) {
const record = JSON.parse(item.data[0])
for (const key in record) {
if (record.hasOwnProperty(key)) {
const idx = methodData.fields_order[key]
if (idx) {
const field_name =
key === 'item_id' ? '道具名称/ID' : methodData.fields[key]
fields_name[idx]
? fields_name.splice(idx, 0, field_name)
: (fields_name[idx] = field_name)
} else {
field.value = allData[fieldName]
result[key].push(field)
fields_name.push(field_name)
}
}
}
fields_name.splice(0, 1)
}
res.send({
errcode: 0,
result: result,
item.data.forEach(d => {
d = JSON.parse(d)
const record = []
for (const key in d) {
if (d.hasOwnProperty(key)) {
const val = key === 'item_id' ? itemList[d[key]] || d[key] : d[key]
const idx = methodData.fields_order[key]
// 若idx为0 不处理排序直接push
if (idx) {
record[idx] ? record.splice(idx, 0, val) : (record[idx] = val)
} else {
record.push(val)
}
}
}
record.splice(0, 1)
records.push(record)
})
} else {
res.send({
errcode: categoryRes.errcode,
errmsg: categoryRes.errmsg,
result.push({
method: item.method,
method_name: methodData.method_name,
fields_name: fields_name,
records: records,
})
return
}
})
res.send({
errcode: 0,
// categoryInfo: categoryInfo,
// methods: methods,
// methodDataRes: methodDataRes,
result: result,
})
} catch (err) {
console.log(err)
next(err)
}
})
function getCategoryData(cateName, date, is_new, game_id, platform_id) {
function getMethodData(method, opt) {
return new Promise(async (resolve, reject) => {
const dataRes = await axios({
url: gameReportApiUrl,
method: 'get',
params: {
c: 'Ops',
a: 'gameReport',
body: JSON.stringify({
gameid: game_id,
channel: platform_id,
times: date,
is_new: is_new,
category: cateName,
}),
a: 'getreport',
gameid: opt.gameid,
channelid: opt.channelid,
times: opt.times,
methods: method,
},
})
if (dataRes.data.errcode === 0) {
const data = dataRes.data.result
resolve(data)
resolve({
data: data,
method: method,
})
} else {
reject({
errcode: 404,

View File

@ -11,6 +11,7 @@ const GameInfo = new mongoose.Schema(
game_name_en: {type: String},
game_id: {type: String},
game_type: {type: String},
game_size: {type: String, default: '512*1024'},
game_icon: {type: String},
platforms: [{type: Object}],
recommendation: {type: Object},