Merge branch 'master' into dev
This commit is contained in:
commit
b34c2d3df2
231
src/controllers/games/data copy.js
Normal file
231
src/controllers/games/data copy.js
Normal 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
|
@ -1,6 +1,9 @@
|
|||||||
// 获取单个游戏广告位
|
// 获取单个游戏广告位
|
||||||
import {Router} from 'express'
|
import {Router} from 'express'
|
||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
|
|
||||||
|
import GameItem from '../../models/admin/GameItem'
|
||||||
|
|
||||||
import config from '../../../config/config'
|
import config from '../../../config/config'
|
||||||
|
|
||||||
const router = new Router()
|
const router = new Router()
|
||||||
@ -27,120 +30,162 @@ router.get('/report', async (req, res, next) => {
|
|||||||
/* 权限验证 end */
|
/* 权限验证 end */
|
||||||
|
|
||||||
const query = req.query
|
const query = req.query
|
||||||
const game_id = parseInt(query.game_id)
|
const game_id = query.game_id
|
||||||
const platform_id = parseInt(query.platform_id)
|
const platform_id = query.platform_id
|
||||||
const date = query.date
|
const date = query.date
|
||||||
const isNew = parseInt(query.isNew)
|
|
||||||
|
|
||||||
try {
|
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({
|
const categoryRes = await axios({
|
||||||
url: gameReportApiUrl,
|
url: gameReportApiUrl,
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: {
|
params: {
|
||||||
c: 'Ops',
|
c: 'Ops',
|
||||||
a: 'descField',
|
a: 'getmethods',
|
||||||
body: JSON.stringify({
|
gameid: game_id,
|
||||||
gameid: game_id,
|
channelid: platform_id,
|
||||||
channel: platform_id,
|
|
||||||
}),
|
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
const category = categoryRes.data.result
|
||||||
|
|
||||||
if (categoryRes.data.errcode === 0) {
|
category.map(item => {
|
||||||
const categoryInfo = categoryRes.data.result
|
if (!categoryInfo[item.methods]) {
|
||||||
const category = []
|
categoryInfo[item.methods] = {}
|
||||||
for (const key in categoryInfo) {
|
categoryInfo[item.methods].fields = {}
|
||||||
if (categoryInfo.hasOwnProperty(key)) {
|
categoryInfo[item.methods].fields_order = {}
|
||||||
category.push(key)
|
categoryInfo[item.methods].order = ''
|
||||||
}
|
categoryInfo[item.methods].method_name = item.method_display
|
||||||
|
methods.push(item.methods)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (category.length === 0) {
|
if (item.need_sort) categoryInfo[item.methods].order = item.fields
|
||||||
res.send({
|
|
||||||
errcode: 404,
|
categoryInfo[item.methods].fields[item.fields] = item.comment
|
||||||
errmsg: '暂无数据!',
|
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 => {
|
if (item.data[0]) {
|
||||||
getDataArr.push(
|
const record = JSON.parse(item.data[0])
|
||||||
getCategoryData(item, date, isNew, game_id, platform_id)
|
for (const key in record) {
|
||||||
)
|
if (record.hasOwnProperty(key)) {
|
||||||
})
|
const idx = methodData.fields_order[key]
|
||||||
|
if (idx) {
|
||||||
const dataArr = await Promise.all(getDataArr)
|
const field_name =
|
||||||
const allData = Object.assign(...dataArr)
|
key === 'item_id' ? '道具名称/ID' : methodData.fields[key]
|
||||||
|
fields_name[idx]
|
||||||
const result = {}
|
? fields_name.splice(idx, 0, field_name)
|
||||||
|
: (fields_name[idx] = field_name)
|
||||||
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 {
|
} else {
|
||||||
field.value = allData[fieldName]
|
fields_name.push(field_name)
|
||||||
result[key].push(field)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
fields_name.splice(0, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
res.send({
|
item.data.forEach(d => {
|
||||||
errcode: 0,
|
d = JSON.parse(d)
|
||||||
result: result,
|
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({
|
result.push({
|
||||||
errcode: categoryRes.errcode,
|
method: item.method,
|
||||||
errmsg: categoryRes.errmsg,
|
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) {
|
} catch (err) {
|
||||||
|
console.log(err)
|
||||||
next(err)
|
next(err)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
function getCategoryData(cateName, date, is_new, game_id, platform_id) {
|
function getMethodData(method, opt) {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
const dataRes = await axios({
|
const dataRes = await axios({
|
||||||
url: gameReportApiUrl,
|
url: gameReportApiUrl,
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: {
|
params: {
|
||||||
c: 'Ops',
|
c: 'Ops',
|
||||||
a: 'gameReport',
|
a: 'getreport',
|
||||||
body: JSON.stringify({
|
gameid: opt.gameid,
|
||||||
gameid: game_id,
|
channelid: opt.channelid,
|
||||||
channel: platform_id,
|
times: opt.times,
|
||||||
times: date,
|
methods: method,
|
||||||
is_new: is_new,
|
|
||||||
category: cateName,
|
|
||||||
}),
|
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
if (dataRes.data.errcode === 0) {
|
if (dataRes.data.errcode === 0) {
|
||||||
const data = dataRes.data.result
|
const data = dataRes.data.result
|
||||||
resolve(data)
|
resolve({
|
||||||
|
data: data,
|
||||||
|
method: method,
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
reject({
|
reject({
|
||||||
errcode: 404,
|
errcode: 404,
|
||||||
|
@ -11,6 +11,7 @@ const GameInfo = new mongoose.Schema(
|
|||||||
game_name_en: {type: String},
|
game_name_en: {type: String},
|
||||||
game_id: {type: String},
|
game_id: {type: String},
|
||||||
game_type: {type: String},
|
game_type: {type: String},
|
||||||
|
game_size: {type: String, default: '512*1024'},
|
||||||
game_icon: {type: String},
|
game_icon: {type: String},
|
||||||
platforms: [{type: Object}],
|
platforms: [{type: Object}],
|
||||||
recommendation: {type: Object},
|
recommendation: {type: Object},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user