Commit dd66583d by lixinming

no message

parent f24753bb
import { lastActiveMap, sevenHourActivity } from "../data/interface/activeQueueData";
import { getBaiduStats, getUV } from "../data/interface/baiduStats";
import { getZyhdbzData } from "../data/interface/data";
import { statsQueue } from "../data/interface/queueData";
import { getKeyValueListData, getReflectionData } from "./out";
import moment = require("moment");
export async function getData(req, res) {
......@@ -47,72 +49,53 @@ export async function getData(req, res) {
res.send(ret);
}
function getViewShowDateFormat(startTime:number, endTime:number) {
return `${moment(startTime).format('YYYY/MM/DD')}~${moment(endTime).format('MM/DD')}`;
}
export async function getPopData(req, res) {
//访问人数和访问趋势获取阿里云 玑脉大平台 数据
// let activeList:any = await getActiveListData();
// let resultList = [];
// activeList.forEach(item => {
// let state = "活动预告";
// if (item.hdztxh == '1') state = "活动进行中";
// else if (item.hdztxh == '2') state = "活动结束";
// let registered = 0;
// if (!isNaN(item.zcrs) ) registered = parseInt(item.zcrs);
// let complaints = 0;
// if (!isNaN(item.yhtsl) ) complaints = parseInt(item.yhtsl);
// resultList.push({
// title:item.hdmc,
// state,//状态
// time:item.hdsj,//活动时间
// registered,//注册人数
// complaints,//用户投诉量
// });
// });
// // let dataList = [];
let onceData = {
title:"聚合磁力2022跨界电商测试测试测试测试",
state:"活动预告",
registered:12600,//注册人数
time:"2022/01/22~01/23",//活动时间
access:99900,//访问人数
complaints:1000,//投诉量
trend:[
{key:"12:30", value:200},
{key:"13:00", value:100},
{key:"13:30", value:200},
{key:"14:00", value:100},
{key:"14:30", value:200},
{key:"15:00", value:100},
{key:"15:30", value:200},
]
};
let onceData2 = {
title:"青少年人工智能奥林匹克挑战赛",
state:"活动进行中",
registered:38699,//注册人数
time:"2022/01/22~01/23",//活动时间
access:42563,//访问人数
complaints:42563,//投诉量
trend:[
{key:"12:30", value:200},
{key:"13:00", value:50},
{key:"13:30", value:200},
{key:"14:00", value:50},
{key:"14:30", value:200},
{key:"15:00", value:50},
{key:"15:30", value:200},
]
};
let dataList = [onceData, onceData2];
let result = [];
let timeMs = new Date().valueOf();
for (let key in lastActiveMap) {
let {hdxh, yhtsl, zcrs, dataList, hdkssj, hdjssj} = lastActiveMap[key];
let state = "活动预告";
if (hdxh == "1") state = "活动进行中";
else if (hdxh == "2") state = "活动结束";
let access = 0;
let trend = [];
if (hdkssj <= timeMs ) {
dataList.forEach(info => {
let {key, value} = info;
access += value;
});
if (hdkssj + (7*3600*1000) >= timeMs ) {
trend = sevenHourActivity;
} else {
trend = dataList;
}
}
let onceData = {
title:key,
time:getViewShowDateFormat(hdkssj, hdjssj),
state,
registered:parseInt(zcrs),//注册人数
complaints:parseInt(yhtsl),//投诉量
access,
trend
};
result.push(onceData);
}
res.send({dataList});
res.send({dataList:result});
}
import { activityStats } from "./baiduStats";
import { activityStats, getRecentlyActivityStats } from "./baiduStats";
import { getActivityListData } from "./data";
import moment = require("moment");
let lastActiveMap = {};
export let lastActiveMap = {};
//第一次检测到有数据的时间 如果想要设定时间,把时间填这里
let haveDataTime = 0;
// let startScopeM = 0;
// let startScopeS = 0;
// let endScopeM = 0;
// let endScopeS = 0;
async function cacheActivityData() {
let activityList = await getActivityListData();
let haveUpdate = false;
for (let i = 0; i < activityList.length; i++) {
let {hdkssj, hdjssj, hdmc } = activityList[i];
let {hdkssj, hdjssj, hdmc, hdxh, hdzt, hdztxh, yhtsl, zcrs} = activityList[i];
if (!hdkssj || !hdjssj || !hdmc) continue;
let {startTime, endTime} = getDateFormat(hdkssj, hdjssj);
......@@ -28,8 +23,8 @@ async function cacheActivityData() {
else if (oldItem.startTime != startTime || oldItem.endTime != endTime ) thisItemIsNew = true;
if ( thisItemIsNew ) {
let count = await activityStats(startTime, endTime);
lastActiveMap[hdmc] = {startTime, endTime, count};
let dataList = await activityStats(startTime, endTime);
lastActiveMap[hdmc] = {startTime, endTime, hdxh, hdzt, hdztxh, yhtsl, zcrs, dataList, hdkssj, hdjssj};
}
}
return haveUpdate;
......@@ -42,11 +37,12 @@ function getDateFormat(startTime:number, endTime:number) {
};
}
let startScopeTime = 0;
let endScopeTime= 0;
//这里放活动缓存机制
export function initActiveQueue() {
cacheActivityData();
export function initActivityQueue() {
cacheActivityData();//活动数据
setInterval( async () => {
let thisTime = new Date().valueOf();
......@@ -78,5 +74,46 @@ export function initActiveQueue() {
}, 600* 1000);
}
\ No newline at end of file
}, 10* 1000);
//今日数据
cacheTowData();
setInterval( async () => {
cacheTowData();
}, 600 * 1000);
}
//缓存近7个小时的数据
export let sevenHourActivity = [];
async function cacheTowData() {
let nowTime = moment();
let startTime = moment().subtract(7, 'hours');
let startDay = startTime.get('date');
let today = nowTime.get('date');
let onceDayData = await getRecentlyActivityStats(nowTime.format('YYYYMMDD'), nowTime.add(1,'days').format('YYYYMMDD'));
let queueList = [];
let count = 0;
for (let i = 0; i < onceDayData.length; i++) {
if (count >= 7) break;
let {key, value} = onceDayData[i];
let name = key.split(":")[0];
queueList.push({key:name, value});
count += 1;
}
if (startDay != today) {
let lastDayData = await activityStats( startTime.format('YYYYMMDD'), nowTime.format('YYYYMMDD'));
for (let i = 0; i < lastDayData.length; i++) {
if (count >= 8) break;
let {key, value} = lastDayData[i];
let name = key.split(":")[0];
queueList.push({key:name, value});
count += 1;
}
}
sevenHourActivity = queueList;
}
......@@ -196,4 +196,45 @@ function baiduStatsResultIsNull(res) {
let resData = res.body.data[0];
if (!resData.result ) return true;
return false;
}
export async function getRecentlyActivityStats(startTime, endTime) {
const site_id = 17390466;//使用 玑脉大平台 统计数据
let url = "https://api.baidu.com/json/tongji/v1/ReportService/getData";
let header = {
"username": "shkyzx",
"password": "Support01",
"token": "2444afaabacc40a0819a15815d7ec10f",
"account_type": 1
};
let body = {
"site_id": `${site_id}`,
"start_date": startTime,
"end_date": endTime,
"metrics": "pv_count",
"method": "trend/time/a",
"gran": "hour",
"area": "china"
}
let uvResult:any = await post(url, {body, header}, {});
if ( !baiduStatsResultIsNull(uvResult) ) {
console.log("百度云接口异常");
return [];
}
let resultInfo = uvResult.body.data[0].result;
if (!Array.isArray(resultInfo.items) || !Array.isArray(resultInfo.items[0]) || !Array.isArray(resultInfo.items[1]) ) {
console.log("百度云接口异常 没有近两天日活数据");
return [];
}
let titleList = resultInfo.items[0];
let dataList = resultInfo.items[1];
let resultList = [];
for (let i = 0; i < titleList.length; i++) {
let value = dataList[i][0] || 0;
if (value == "--") value = 0;
resultList.push({key:titleList[i][0], value});
}
return resultList;
}
\ No newline at end of file
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