Commit eccf5687 by 孙香冬

no message

parent 0ae9a9f3
[2024-05-27T09:19:32.854] [ERROR] errorLogger - errorInfo => token已过期 |
[2024-05-27T10:11:45.982] [ERROR] errorLogger - errorInfo => token已过期 |
[2024-05-27T10:13:38.606] [ERROR] errorLogger - errorInfo => token已过期 |
[2024-05-27T10:14:27.502] [ERROR] errorLogger - errorInfo => token已过期 |
[2024-05-27T10:14:41.723] [ERROR] errorLogger - errorInfo => token已过期 |
[2024-05-27T10:15:01.313] [ERROR] errorLogger - errorInfo => token已过期 |
[2024-05-27T10:15:34.485] [ERROR] errorLogger - errorInfo => token已过期 |
[2024-05-27T10:16:00.968] [ERROR] errorLogger - errorInfo => token已过期 |
[2024-05-27T10:16:19.813] [ERROR] errorLogger - errorInfo => token已过期 |
{"data":[{"id":1,"name":"数据治理体系"},{"id":2,"name":"整体运行态势"},{"id":3,"name":"重要活动保障"},{"id":4,"name":"123"},{"id":4,"name":"123"},{"id":5,"name":"123"}]}
\ No newline at end of file
{
"data": [
{
"id": "aiunsdiunfknd1",
"name": "张31",
"phoneNumber": "17173887481",
"allow": [
"数字治理体系"
],
"hasPermission": false,
"userId": "aiunsdiunfknd1"
},
{
"id": "aiunsdiunfknd2",
"name": "李四2",
"phoneNumber": "17273887481",
"allow": [
"数字治理体系",
"整体运行态势",
"重要活动保障"
],
"hasPermission": true,
"userId": "aiunsdiunfknd2"
},
{
"id": "aiunsdiunfknd3",
"name": "王五3",
"phoneNumber": "17373887481",
"allow": [
"数字治理体系",
"整体运行态势",
"重要活动保障"
],
"hasPermission": true,
"userId": "aiunsdiunfknd3"
},
{
"userId": "aiunsdiunfknd4",
"id": "aiunsdiunfknd4",
"name": "王五4",
"phoneNumber": "17473887481",
"hasPermission": true,
"allow": [
"数字治理体系",
"整体运行态势"
]
},
{
"userId": "aiunsdiunfknd5",
"id": "aiunsdiunfknd5",
"name": "王五5",
"phoneNumber": "17573887481",
"hasPermission": true,
"allow": [
"数字治理体系",
"整体运行态势"
]
},
{
"userId": "aiunsdiunfknd6",
"id": "aiunsdiunfknd6",
"name": "王五6",
"phoneNumber": "17673887481",
"hasPermission": true,
"allow": [
"数字治理体系",
"整体运行态势"
]
},
{
"userId": "aiunsdiunfknd7",
"id": "aiunsdiunfknd7",
"name": "王五7",
"phoneNumber": "17773887481",
"hasPermission": true,
"allow": [
"数字治理体系",
"整体运行态势"
]
},
{
"id": "aiunsdiunfknd8",
"name": "王五8",
"phoneNumber": "18723887481",
"allow": [
"整体运行态势"
],
"hasPermission": true,
"userId": "aiunsdiunfknd8"
},
{
"id": "aiunsdiunfknd9",
"name": "王五9",
"phoneNumber": "17273887481",
"allow": [
"数字治理体系",
"整体运行态势",
"重要活动保障"
],
"hasPermission": true,
"userId": "aiunsdiunfknd9"
},
{
"id": "aiunsdiunfknd10",
"name": "王五10",
"phoneNumber": "17273887481",
"allow": [
"数字治理体系"
],
"hasPermission": true,
"userId": "aiunsdiunfknd10"
},
{
"id": "aiunsdiunfknd11",
"name": "张三11",
"phoneNumber": "17273887481",
"allow": [
"数字治理体系",
"整体运行态势",
"重要活动保障"
],
"hasPermission": true,
"userId": "aiunsdiunfknd11"
},
{
"id": "aiunsdiunfknd12",
"name": "李四12",
"phoneNumber": "17273887481",
"allow": [
"数字治理体系",
"整体运行态势",
"重要活动保障"
],
"hasPermission": true,
"userId": "aiunsdiunfknd12"
},
{
"id": "aiunsdiunfknd13",
"name": "王五13",
"phoneNumber": "17273887481",
"allow": [
"整体运行态势"
],"hasPermission": true,
"userId": "aiunsdiunfknd13"
},
{
"userId": "aiunsdiunfknd14",
"id": "aiunsdiunfknd14",
"name": "王五14",
"phoneNumber": "17273887481",
"hasPermission": true,
"allow": [
"数字治理体系",
"整体运行态势"
]
},
{
"userId": "aiunsdiunfknd15",
"id": "aiunsdiunfknd15",
"name": "王五15",
"phoneNumber": "17273887481",
"hasPermission": true,
"allow": [
"数字治理体系",
"整体运行态势"
]
},
{
"userId": "aiunsdiunfknd16",
"id": "aiunsdiunfknd16",
"name": "王五16",
"phoneNumber": "17273887481",
"hasPermission": true,
"allow": [
"数字治理体系",
"整体运行态势"
]
},
{
"userId": "aiunsdiunfknd17",
"id": "aiunsdiunfknd17",
"name": "王五17",
"phoneNumber": "17273887481",
"hasPermission": true,
"allow": [
"数字治理体系",
"整体运行态势"
]
},
{
"userId": "aiunsdiunfknd18",
"id": "aiunsdiunfknd18",
"name": "王五18",
"phoneNumber": "17273887481",
"hasPermission": true,
"allow": [
"数字治理体系",
"整体运行态势"
]
},
{
"id": "aiunsdiunfknd19",
"name": "王五19",
"phoneNumber": "17273887481",
"allow": [
"数字治理体系",
"整体运行态势",
"重要活动保障"
],
"hasPermission": true,
"userId": "aiunsdiunfknd19"
},
{
"userId": "aiunsdiunfknd20",
"id": "aiunsdiunfknd20",
"name": "王五20",
"phoneNumber": "17273887481",
"hasPermission": true,
"allow": [
"数字治理体系",
"整体运行态势"
]
},
{
"userId": "aiunsdiunfknd21",
"id": "aiunsdiunfknd21",
"name": "张三21",
"phoneNumber": "17273887481",
"hasPermission": true,
"allow": [
"数字治理体系",
"整体运行态势",
"重要活动保障"
]
},
{
"userId": "aiunsdiunfknd22",
"id": "aiunsdiunfknd22",
"name": "李四22--",
"phoneNumber": "17273887481",
"hasPermission": true,
"allow": [
"数字治理体系",
"重要活动保障"
]
},
{
"userId": "aiunsdiunfknd23",
"id": "aiunsdiunfknd23",
"name": "王五23",
"phoneNumber": "17273887481",
"hasPermission": true,
"allow": [
"数字治理体系",
"整体运行态势"
]
},
{
"userId": "aiunsdiunfknd24",
"id": "aiunsdiunfknd24",
"name": "王五24",
"phoneNumber": "17273887481",
"hasPermission": true,
"allow": [
"数字治理体系",
"整体运行态势"
]
},
{
"userId": "aiunsdiunfknd25",
"id": "aiunsdiunfknd25",
"name": "王五25",
"phoneNumber": "17273887481",
"hasPermission": true,
"allow": [
"数字治理体系",
"整体运行态势"
]
},
{
"userId": "aiunsdiunfknd26",
"id": "aiunsdiunfknd26",
"name": "王五26",
"phoneNumber": "17273887481",
"hasPermission": true,
"allow": [
"数字治理体系",
"整体运行态势"
]
},
{
"userId": "aiunsdiunfknd27",
"id": "aiunsdiunfknd27",
"name": "王五27",
"phoneNumber": "17273887481",
"hasPermission": true,
"allow": [
"数字治理体系",
"整体运行态势"
]
},
{
"userId": "aiunsdiunfknd28",
"id": "aiunsdiunfknd28",
"name": "王五28",
"phoneNumber": "17273887481",
"hasPermission": true,
"allow": [
"数字治理体系",
"整体运行态势"
]
},
{
"userId": "aiunsdiunfknd29",
"id": "aiunsdiunfknd29",
"name": "王五29",
"phoneNumber": "17273887481",
"hasPermission": true,
"allow": [
"数字治理体系"
]
},
{
"userId": "aiunsdiunfknd30",
"id": "aiunsdiunfknd30",
"name": "王五30",
"phoneNumber": "17273887481",
"hasPermission": true,
"allow": [
"数字治理体系"
]
}
]
}
\ No newline at end of file
{
"e6e4aaaf-2184-4be4-adb9-4e8f5c15dbb5": {
"sub": "e6e4aaaf-2184-4be4-adb9-4e8f5c15dbb5",
"id": 1,
"phone": "18918589400",
"otherPage": true,
"name": "吴靖",
"isAdmin": true,
"pm": {
"1": true,
"2": true,
"3": true,
"11": true,
"21": true
}
},
"3eaf7efd-9101-4cd6-9466-ef3a1d34f076": {
"sub": "3eaf7efd-9101-4cd6-9466-ef3a1d34f076",
"id": 2,
"phone": "18016272282",
"otherPage": true,
"name": "李晶",
"isAdmin": true,
"pm": {
"1": true,
"2": true,
"3": true,
"11": true,
"21": true
}
},
"4ef51e92-fa32-4c64-8f63-7e1719a1165b": {
"sub": "4ef51e92-fa32-4c64-8f63-7e1719a1165b",
"id": 3,
"phone": "13384928945",
"otherPage": true,
"name": "张家萌",
"isAdmin": false,
"pm": {
"1": true,
"2": true,
"3": true,
"11": true
}
},
"c3d5150d-adbb-4aa3-985e-130158292523": {
"sub": "c3d5150d-adbb-4aa3-985e-130158292523",
"id": 4,
"phone": "13917568424",
"otherPage": true,
"name": "朱青",
"isAdmin": true,
"pm": {
"1": true,
"2": true,
"3": true,
"11": true,
"21": true
}
},
"f6d7835e-8502-40b4-9191-ad5f01af339e": {
"sub": "f6d7835e-8502-40b4-9191-ad5f01af339e",
"id": 6,
"phone": "18621939307",
"otherPage": true,
"name": "谭佳丽",
"isAdmin": false,
"pm": {
"11": true
}
},
"2968c112-481c-43ae-bc91-81ac0b0deabf": {
"sub": "2968c112-481c-43ae-bc91-81ac0b0deabf",
"id": 7,
"phone": "13564320268",
"otherPage": true,
"name": "洪筱菡",
"isAdmin": true,
"pm": {
"1": true,
"2": true,
"3": true,
"11": true,
"21": true
}
}
}
\ No newline at end of file
...@@ -25,12 +25,12 @@ ...@@ -25,12 +25,12 @@
"mysql": "^2.18.1", "mysql": "^2.18.1",
"node-xlsx": "^0.16.1", "node-xlsx": "^0.16.1",
"nodemailer": "^6.1.1", "nodemailer": "^6.1.1",
"pyfl": "^1.1.4",
"redis": "^4.1.0", "redis": "^4.1.0",
"request": "^2.88.2", "request": "^2.88.2",
"svg-captcha": "^1.3.12", "svg-captcha": "^1.3.12",
"ws": "^5.2.2" "ws": "^5.2.2"
}, }
"devDependencies": {}
}, },
"node_modules/@alicloud/dybaseapi": { "node_modules/@alicloud/dybaseapi": {
"version": "1.0.0", "version": "1.0.0",
...@@ -1399,6 +1399,11 @@ ...@@ -1399,6 +1399,11 @@
"node": ">=6" "node": ">=6"
} }
}, },
"node_modules/pyfl": {
"version": "1.1.4",
"resolved": "https://registry.npmmirror.com/pyfl/-/pyfl-1.1.4.tgz",
"integrity": "sha512-tEwj+SYfOk7zMStPrcDvadkUYomRIX6URQA/dl+YDqaEZlP9gEXM501FUsorz5HozCkfIeFOoT7U2jTElQ+zYg=="
},
"node_modules/qs": { "node_modules/qs": {
"version": "6.5.3", "version": "6.5.3",
"resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz", "resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz",
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
"mysql": "^2.18.1", "mysql": "^2.18.1",
"node-xlsx": "^0.16.1", "node-xlsx": "^0.16.1",
"nodemailer": "^6.1.1", "nodemailer": "^6.1.1",
"pyfl": "^1.1.4",
"redis": "^4.1.0", "redis": "^4.1.0",
"request": "^2.88.2", "request": "^2.88.2",
"svg-captcha": "^1.3.12", "svg-captcha": "^1.3.12",
......
{
"userId":""
}
\ No newline at end of file
/** /**
* 学校健康信息监测 * 学校健康信息监测
* 弃用 改为申生康新页面
*/ */
import { getChartOutData, getKeyStringValueOutData, getListOutData } from "../../cal/out"; import { getChartOutData, getKeyStringValueOutData, getListOutData } from "../../cal/out";
......
/** /**
* 上海市青少年科学创新实践工作站 * 上海市青少年科学创新实践工作站
* 有修改
*/ */
import { getChartOutData, getKeyNumberValueOutData, getKeyStringValueOutData, getListOutData, getStringOutData } from "../../cal/out"; import { getChartOutData, getKeyNumberValueOutData, getKeyStringValueOutData, getListOutData, getStringOutData } from "../../cal/out";
......
/** /**
* 上海市青少年科学创新实践工作站 * 上海市青少年科学创新实践工作站弹窗
* 有修改
*/ */
import { getChartOutData, getKeyNumberValueOutData, getKeyStringValueOutData, getListOutData } from "../../cal/out"; import { getChartOutData, getKeyNumberValueOutData, getKeyStringValueOutData, getListOutData } from "../../cal/out";
......
/**
* 数据治理体系
*/
import { getSzjltxData } from "../data/interface/data"; import { getSzjltxData } from "../data/interface/data";
import { getKeyValueListData, getReflectionData } from "./out"; import { getKeyValueListData, getReflectionData } from "./out";
......
...@@ -55,6 +55,7 @@ async function refreshToken(refresh_token) { ...@@ -55,6 +55,7 @@ async function refreshToken(refresh_token) {
export async function checkAccessToken(access_token) { export async function checkAccessToken(access_token) {
let result:any = await getParmiss(uacInfomation.getUserInfoUrl, {}, {"Authorization": `Bearer ${access_token}`}); let result:any = await getParmiss(uacInfomation.getUserInfoUrl, {}, {"Authorization": `Bearer ${access_token}`});
let {sub, permission, phone, real_name} = result; let {sub, permission, phone, real_name} = result;
console.log(JSON.stringify(result))
if (!sub) return {sub:false }; if (!sub) return {sub:false };
permission = permission || ""; permission = permission || "";
...@@ -78,6 +79,7 @@ async function getUserInfo(access_token) { ...@@ -78,6 +79,7 @@ async function getUserInfo(access_token) {
permission = permission || ""; permission = permission || "";
isAdmin = permission.indexOf("dpzs_client_admin") > -1;//是否能进入管理后天 isAdmin = permission.indexOf("dpzs_client_admin") > -1;//是否能进入管理后天
let otherPage = permission.indexOf("dpzs_client_znfx") > -1; //是否能进入二级页面 let otherPage = permission.indexOf("dpzs_client_znfx") > -1; //是否能进入二级页面
console.log(isAdmin, sub, role, real_name, phone, otherPage)
return {isAdmin, sub, role, real_name, phone, otherPage}; return {isAdmin, sub, role, real_name, phone, otherPage};
} }
......
/**
* 整体运行态势
*/
import { getZtyxtsData } from "../data/interface/data"; import { getZtyxtsData } from "../data/interface/data";
import { statsQueue } from "../data/interface/queueData"; import { statsQueue } from "../data/interface/queueData";
import { getKeyValueListData, getReflectionData } from "./out"; import { getKeyValueListData, getReflectionData } from "./out";
...@@ -45,6 +49,5 @@ export async function getData(req, res) { ...@@ -45,6 +49,5 @@ export async function getData(req, res) {
} }
ret["zykyx"] = {title:"资源可用性", data:zykyxInfo}; ret["zykyx"] = {title:"资源可用性", data:zykyxInfo};
res.send(ret); res.send(ret);
} }
\ No newline at end of file
/**
* 重要活动保障
*/
import { lastActiveMap, sevenHourActivity } from "../data/interface/activeQueueData"; import { lastActiveMap, sevenHourActivity } from "../data/interface/activeQueueData";
import { getBaiduStats, getUV } from "../data/interface/baiduStats"; import { getBaiduStats, getUV } from "../data/interface/baiduStats";
import { getZyhdbzData } from "../data/interface/data"; import { getZyhdbzData } from "../data/interface/data";
...@@ -91,6 +95,22 @@ export async function getPopData(req, res) { ...@@ -91,6 +95,22 @@ export async function getPopData(req, res) {
access, access,
trend trend
}; };
// todo 接口无数据返回,调试接口用假数据,上线修改回去
// let onceData = {
// title:"青少年人工智能奥林匹克挑战赛",
// time:"2024/12/22 ~ 12/30",
// state:"活动进行中",
// registered:38699,//注册人数
// complaints:42563,//投诉量
// access:42135,
// trend:[
// {key:"12:30", value:0},
// {key:"12:45", value:0},
// {key:"12:50", value:0},
// ]
// };
result.push(onceData); result.push(onceData);
} }
......
/**
* 上海市学生素质教育优质资源平台(周周播)
*/
import { curriculumTableData, weeklyPlayTableData } from "../../data/table/tableData";
import { keyValuePackage, onceYBarChartPackage, stringListPackage, tablePackage } from "../../dataPackage/inFrontOut";
import { getKeyValueOut, getStringOut, getOnceYBarChartOut } from "../../dataPackage/out";
export function getData(req, res) {
let excelData = weeklyPlayTableData();
let ret:any = {};
/**左屏 */
let kclyqkPackageData = keyValuePackage(excelData['课程来源情况'].dataList);
ret['kclyqk'] = getKeyValueOut('课程来源情况', kclyqkPackageData);
let kcsynjdPackageData = keyValuePackage(excelData['课程适用年级段'].dataList);
ret['kcsynjd'] = getKeyValueOut('课程适用年级段', kcsynjdPackageData);
let kclyfbPackageData = keyValuePackage(excelData['课程领域分布'].dataList);
ret['kclyfb'] = getKeyValueOut('课程领域分布', kclyfbPackageData);
let kclbysChartPackage = onceYBarChartPackage(excelData['课程类别(艺术)'], '');
ret['kclbys'] = getOnceYBarChartOut('课程类别(艺术)', kclbysChartPackage);
let kctfptPackageData = stringListPackage(excelData['课程投放平台'].dataList);
ret['kctfpt'] = getStringOut('课程投放平台', kctfptPackageData);
let jcsjPackageData = keyValuePackage(excelData['基础数据'].dataList);
ret['jcsj'] = getKeyValueOut('基础数据', jcsjPackageData);
let kcbfqkPackageData = keyValuePackage(excelData['课程播放情况'].dataList);
ret['kcbfqk'] = getKeyValueOut('课程播放情况', kcbfqkPackageData);
let ptbflqsChartPackage = onceYBarChartPackage(excelData['平台播放量趋势'], '');
ret['ptbflqs'] = getOnceYBarChartOut('平台播放量趋势', ptbflqsChartPackage);
let ptbflqsZBChartPackage = onceYBarChartPackage(excelData['平台播放量趋势(直播)'], '');
ret['ptbflqsZB'] = getOnceYBarChartOut('平台播放量趋势(直播)', ptbflqsZBChartPackage);
let ptbflqsHFChartPackage = onceYBarChartPackage(excelData['平台播放量趋势(回放)'], '');
ret['ptbflqsHF'] = getOnceYBarChartOut('平台播放量趋势(回放)', ptbflqsHFChartPackage);
let kcsczflChartPackage = onceYBarChartPackage(excelData['课程收藏/转发量'], '');
ret['kcsczfl'] = getOnceYBarChartOut('课程收藏/转发量', kcsczflChartPackage);
let kclxrdphChartPackage = onceYBarChartPackage(excelData['课程类型热度排行(本周)'], '');
ret['kclxrdph'] = getOnceYBarChartOut('课程类型热度排行(本周)', kclxrdphChartPackage);
let rmkcphtop10TableList = tablePackage(excelData['热门课程排行top10(本周)'].headerList[0], excelData['热门课程排行top10(本周)'].bodyList);
ret['rmkcphtop10'] = {title:'热门课程排行top10(本周)', dataList:rmkcphtop10TableList};
let rmbqPackageData = keyValuePackage(excelData['热门标签'].dataList);
ret['rmbq'] = getKeyValueOut('热门标签', rmbqPackageData);
let kcfkPackageData = keyValuePackage(excelData['课程反馈'].dataList);
ret['kcfk'] = getKeyValueOut('课程反馈', kcfkPackageData);
let zxgykcpfPackageData = keyValuePackage(excelData['在线公益课程评分'].dataList);
ret['zxgykcpf'] = getKeyValueOut('在线公益课程评分', zxgykcpfPackageData);
res.send(ret);
}
/**
* 下拉
* @param req
* @param res
*/
export function dropDown(req, res) {
let excelData = curriculumTableData();
let ret:any = {};
let popExcelData = excelData['课程数据'].dataList;
let kcqs = ["全部"];
let ssly = ["全部"];
let zybq = [];
popExcelData.forEach( info => {
kcqs.push(info.kcqs); //期数
ssly.push(info.ssly); //所属领域
zybq.push(info.zybq); //资源标签
});
let qs = kcqs.filter((item, index) => kcqs.indexOf(item) === index);
let type = ssly.filter((item, index) => ssly.indexOf(item) === index);
let lable = zybq.filter((item, index) => zybq.indexOf(item) === index);
ret['dropDown'] = {qs, type, lable};
res.send(ret);
}
/**
* 课程搜索框
* @param req
* @param res
*/
export function curriculumPop(req, res) {
let {name, qs, type, lable} = req.query;
let excelData = curriculumTableData();
let ret:any = {};
let popExcelData = excelData['课程数据'].dataList;
let reg = new RegExp(name);
let popData = [];
let popSliceData = [];
if ((!name && !qs && !type && !lable) || (!name && qs == "全部" && type == "全部" && lable == "全部年级")) {
popExcelData.sort( (a, b) => {
return b.bfl - a.bfl;
});
popSliceData = popExcelData.slice(0, 10);
} else {
popSliceData = popExcelData;
}
let kcsj; //课程数据
let kcsjConf = ["kcdz", "ks", "kcmc", "skls", "ssly", "zybq", "dzl", "bfl", "scs", "yddzfl", "kcqs"];
let zb; //直播
let zbConf = ["zb1", "zb2", "zb3", "zb4", "zb5", "zb6", "zb7"];
let hf; //回放
let hfConf = ["hf1", "hf2", "hf3", "hf4", "hf5", "hf6", "hf7"];
popSliceData.forEach( info => {
let kcqs = info.kcqs; //课程期数
let kcmc = info.kcmc; //课程关键词
let ssly = info.ssly; //所属领域
let zybq = info.zybq; //资源标签
let matches = {
name:true,
qs:true,
type:true,
lable:true
};
if (qs) {
if (qs != kcqs) matches.qs = false;
if (qs == "全部" || kcqs == "全部") matches.qs = true;
}
if (type) {
if (type != ssly) matches.type = false;
if (type == "全部" || ssly == "全部") matches.type = true;
}
if (lable) {
if (lable != zybq) matches.lable = false;
if (lable == "全部年级" || zybq == "全部年级") matches.lable = true;
}
if (name) {
if (reg.test(kcmc)) {
matches.name = true;
} else {
matches.name = false;
}
}
if (matches.name && matches.qs && matches.type && matches.lable) {
/**课程数据 */
kcsj = getConfData(info, kcsjConf)
/**直播数据 */
zb = getZB(getConfData(info, zbConf));
/**回放数据 */
hf = getHF(getConfData(info, hfConf));
popData.push({"课程数据":kcsj, "直播":zb, "回放":hf});
}
})
ret['popData'] = {title:'弹窗数据', dataList:popData};
res.send(ret);
}
function getConfData(info, conf) {
let result = {};
for (let i = 0; i < conf.length; i++) {
result[conf[i]] = info[conf[i]];
}
return result;
}
function getZB(data) {
let result = [];
for (let key in data) {
switch (key) {
case 'zb1':
result.push({ key:"周一", value:data[key] });
break;
case 'zb2':
result.push({ key:"周二", value:data[key] });
break;
case 'zb3':
result.push({ key:"周三", value:data[key] });
break;
case 'zb4':
result.push({ key:"周四", value:data[key] });
break;
case 'zb5':
result.push({ key:"周五", value:data[key] });
break;
case 'zb6':
result.push({ key:"周六", value:data[key] });
break;
case 'zb7':
result.push({ key:"周日", value:data[key] });
break;
}
}
return result;
}
function getHF(data) {
let result = [];
for (let key in data) {
switch (key) {
case 'hf1':
result.push({ key:"周一", value:data[key] });
break;
case 'hf2':
result.push({ key:"周二", value:data[key] });
break;
case 'hf3':
result.push({ key:"周三", value:data[key] });
break;
case 'hf4':
result.push({ key:"周四", value:data[key] });
break;
case 'hf5':
result.push({ key:"周五", value:data[key] });
break;
case 'hf6':
result.push({ key:"周六", value:data[key] });
break;
case 'hf7':
result.push({ key:"周日", value:data[key] });
break;
}
}
return result;
}
...@@ -23,6 +23,8 @@ export enum PAGEENUM { ...@@ -23,6 +23,8 @@ export enum PAGEENUM {
重要活动保障 = 3, 重要活动保障 = 3,
健康 = 11, 健康 = 11,
创新实践工作站 = 21, 创新实践工作站 = 21,
优秀资源平台 = 22,
周周播 = 23
} }
export enum PAGEENUM1 { export enum PAGEENUM1 {
...@@ -37,6 +39,8 @@ export enum PAGEENUM2 { ...@@ -37,6 +39,8 @@ export enum PAGEENUM2 {
export enum PAGEENUM3 { export enum PAGEENUM3 {
创新实践工作站 = 21, 创新实践工作站 = 21,
优秀资源平台 = 22,
周周播 = 23
} }
export enum INTERFACEREQUESTTYPEENUM { export enum INTERFACEREQUESTTYPEENUM {
......
...@@ -9,6 +9,7 @@ let haveDataTime = 0; ...@@ -9,6 +9,7 @@ let haveDataTime = 0;
async function cacheActivityData() { async function cacheActivityData() {
let activityList = await getActivityListData(); let activityList = await getActivityListData();
console.log(activityList);
let haveUpdate = false; let haveUpdate = false;
for (let i = 0; i < activityList.length; i++) { for (let i = 0; i < activityList.length; i++) {
let {hdkssj, hdjssj, hdmc, hdxh, hdzt, hdztxh, yhtsl, zcrs} = activityList[i]; let {hdkssj, hdjssj, hdmc, hdxh, hdzt, hdztxh, yhtsl, zcrs} = activityList[i];
......
...@@ -7,8 +7,10 @@ export async function getALYStats(isFirst) { ...@@ -7,8 +7,10 @@ export async function getALYStats(isFirst) {
let nowTime = new Date().valueOf(); let nowTime = new Date().valueOf();
let startTime = new Date(moment().format("YYYY-MM-DD 00:00:00")).valueOf(); let startTime = new Date(moment().format("YYYY-MM-DD 00:00:00")).valueOf();
let alyData:any = await getAL("Availability", startTime, nowTime, 3600 ); let alyData:any = await getAL("Availability", startTime, nowTime, 3600 );
console.log(alyData);
if (isFirst) console.log("初始化进度 10%"); if (isFirst) console.log("初始化进度 10%");
let timeData:any = await getAL("ResponseTime", startTime, nowTime, 3600); let timeData:any = await getAL("ResponseTime", startTime, nowTime, 3600);
console.log(timeData);
if (isFirst) console.log("初始化进度 20%"); if (isFirst) console.log("初始化进度 20%");
if (alyData.Code != "200" || timeData.Code != "200") { if (alyData.Code != "200" || timeData.Code != "200") {
return "timeOut"; return "timeOut";
...@@ -23,8 +25,10 @@ export async function getALYStats(isFirst) { ...@@ -23,8 +25,10 @@ export async function getALYStats(isFirst) {
let taskInfoList = []; let taskInfoList = [];
for (let i = 0; i < taskIdList.length; i++) { for (let i = 0; i < taskIdList.length; i++) {
let onceTaskId = taskIdList[i]; let onceTaskId = taskIdList[i];
let info = await getTaskInfo(onceTaskId); /** todo 20241217启动服务失败暂时注释 start */
if (info) taskInfoList.push(info); // let info = await getTaskInfo(onceTaskId);
// if (info) taskInfoList.push(info);
/** todo 20241217启动服务失败暂时注释 end */
} }
// let todayTime = new Date(moment().format("YYYY-MM-DD 00:00:00")).valueOf(); // let todayTime = new Date(moment().format("YYYY-MM-DD 00:00:00")).valueOf();
......
import moment = require("moment"); import moment = require("moment");
import { post } from "../../util/request"; import { post } from "../../util/request";
import { getActivityListData } from "./data"; import { getActivityListData } from "./data";
import { getAccessToken } from "./baiduyun";
let baiDuToken = '"eyJhbGciOiJIUzM4NCJ9.eyJzdWIiOiJhY2MiLCJhdWQiOiLmmbrog73liIbmnpDkuozmioDpobXpnaIiLCJ1aWQiOjU1NjU5MDExLCJhcHBJZCI6IjcxZWQwOGIxM2E5ZWYxMDJiMGUwOTEzYzM3Y2ZiY2E0IiwiaXNzIjoi5ZWG5Lia5byA5Y-R6ICF5Lit5b-DIiwicGxhdGZvcm1JZCI6IjQ5NjAzNDU5NjU5NTg1NjE3OTQiLCJleHAiOjE3MzQ0ODQ2MTYsImp0aSI6Ii05MTQ1NzM1NjkyNjA1MjA1MTgzIn0.8dAwCSwvfqnAH0bY46ASZAXFxxh7y6EDQXSvtLntxNQqAuxIuYxiffy9ybXfTNV-"';
//https://api.baidu.com => 192.168.0.105:20001 //https://api.baidu.com => 192.168.0.105:20001
function statsDataFormat() { function statsDataFormat() {
let dayStartTime = moment().add(-6, 'days'); let dayStartTime = moment().add(-6, 'days');
...@@ -18,10 +21,19 @@ export async function getBaiduStats() { ...@@ -18,10 +21,19 @@ export async function getBaiduStats() {
const site_id = 17390466; const site_id = 17390466;
let {startTime, endTime, thisMonthStartTime} = statsDataFormat(); let {startTime, endTime, thisMonthStartTime} = statsDataFormat();
let url = "https://api.baidu.com/json/tongji/v1/ReportService/getData"; let url = "https://api.baidu.com/json/tongji/v1/ReportService/getData";
// let header = {
// "username": "shkyzx",
// "password": "Support01",
// // "token": "2444afaabacc40a0819a15815d7ec10f",
// "token": baiDuToken,
// "account_type": 1
// };
let header = { let header = {
"username": "shkyzx", "userName": "secsa",
"password": "Support01", // "accessToken": "eyJhbGciOiJIUzM4NCJ9.eyJzdWIiOiJhY2MiLCJhdWQiOiLnmb7luqbnu5_orqEiLCJ1aWQiOjM1OTI5MTE2LCJhcHBJZCI6IjEzYmQ1MDQ5YTY3NmQxMDczNzk1OTkzMjEwMmVjNTU3IiwiaXNzIjoi5ZWG5Lia5byA5Y-R6ICF5Lit5b-DIiwicGxhdGZvcm1JZCI6IjQ5NjAzNDU5NjU5NTg1NjE3OTQiLCJleHAiOjE3MTc5MDIxMTcsImp0aSI6Ijg1MzMwMzA2MDQ2NjM5ODgyMzIifQ.n9fL-p7m-D60OKIdAvOtGSQgReIW_nlubX-_v8defXAqRSpTT6RzPUdORIjL7geL",
"token": "2444afaabacc40a0819a15815d7ec10f", //todo 换授权令牌接口
"accessToken": baiDuToken,
"account_type": 1 "account_type": 1
}; };
let body = { let body = {
...@@ -93,10 +105,19 @@ export async function getUV() { ...@@ -93,10 +105,19 @@ export async function getUV() {
const site_id = 17390466;//这里获取的是 玑脉大平台 日活数据 const site_id = 17390466;//这里获取的是 玑脉大平台 日活数据
let {startTime, endTime} = uvDataFormat(); let {startTime, endTime} = uvDataFormat();
let url = "https://api.baidu.com/json/tongji/v1/ReportService/getData"; let url = "https://api.baidu.com/json/tongji/v1/ReportService/getData";
// let header = {
// "username": "shkyzx",
// "password": "Support01",
// // "token": "2444afaabacc40a0819a15815d7ec10f",
// "token": baiDuToken,
// "account_type": 1
// };
let header = { let header = {
"username": "shkyzx", "userName": "secsa",
"password": "Support01", // "accessToken": "eyJhbGciOiJIUzM4NCJ9.eyJzdWIiOiJhY2MiLCJhdWQiOiLnmb7luqbnu5_orqEiLCJ1aWQiOjM1OTI5MTE2LCJhcHBJZCI6IjEzYmQ1MDQ5YTY3NmQxMDczNzk1OTkzMjEwMmVjNTU3IiwiaXNzIjoi5ZWG5Lia5byA5Y-R6ICF5Lit5b-DIiwicGxhdGZvcm1JZCI6IjQ5NjAzNDU5NjU5NTg1NjE3OTQiLCJleHAiOjE3MTc5MDIxMTcsImp0aSI6Ijg1MzMwMzA2MDQ2NjM5ODgyMzIifQ.n9fL-p7m-D60OKIdAvOtGSQgReIW_nlubX-_v8defXAqRSpTT6RzPUdORIjL7geL",
"token": "2444afaabacc40a0819a15815d7ec10f", //todo 换授权令牌接口
"accessToken": baiDuToken,
"account_type": 1 "account_type": 1
}; };
let body = { let body = {
...@@ -116,6 +137,14 @@ export async function getUV() { ...@@ -116,6 +137,14 @@ export async function getUV() {
} }
return uv; return uv;
} }
export async function initBaiDuToken() {
// let {access_token} = await getAccessToken();
// baiDuToken = access_token;
// setInterval( async () => {
// let refTokenInfo = await getAccessToken();
// baiDuToken = refTokenInfo.access_token;
// }, 25 *60 *1000);
}
export async function getBaiduSiteList() { export async function getBaiduSiteList() {
let url = "https://api.baidu.com/json/tongji/v1/ReportService/getSiteList"; let url = "https://api.baidu.com/json/tongji/v1/ReportService/getSiteList";
...@@ -127,8 +156,10 @@ export async function getBaiduSiteList() { ...@@ -127,8 +156,10 @@ export async function getBaiduSiteList() {
// }; // };
let header = { let header = {
"userName": "shkyzx", "userName": "secsa",
"accessToken": "eyJhbGciOiJIUzM4NCJ9.eyJzdWIiOiJhY2MiLCJhdWQiOiLnmb7luqbnu5_orqEiLCJ1aWQiOjM1OTI5MTE2LCJhcHBJZCI6IjEzYmQ1MDQ5YTY3NmQxMDczNzk1OTkzMjEwMmVjNTU3IiwiaXNzIjoi5ZWG5Lia5byA5Y-R6ICF5Lit5b-DIiwicGxhdGZvcm1JZCI6IjQ5NjAzNDU5NjU5NTg1NjE3OTQiLCJleHAiOjE3MDE0MTE2ODgsImp0aSI6IjgwNDIxODIxOTEzODUxOTA0MjYifQ.fJLIxDxYxTiAwbxSDnDRnYsZckxYJSa__jBtCrbc_aSWRt6sKx70SeOidQeIpFI7", // "accessToken": "eyJhbGciOiJIUzM4NCJ9.eyJzdWIiOiJhY2MiLCJhdWQiOiLnmb7luqbnu5_orqEiLCJ1aWQiOjM1OTI5MTE2LCJhcHBJZCI6IjEzYmQ1MDQ5YTY3NmQxMDczNzk1OTkzMjEwMmVjNTU3IiwiaXNzIjoi5ZWG5Lia5byA5Y-R6ICF5Lit5b-DIiwicGxhdGZvcm1JZCI6IjQ5NjAzNDU5NjU5NTg1NjE3OTQiLCJleHAiOjE3MTc5MDIxMTcsImp0aSI6Ijg1MzMwMzA2MDQ2NjM5ODgyMzIifQ.n9fL-p7m-D60OKIdAvOtGSQgReIW_nlubX-_v8defXAqRSpTT6RzPUdORIjL7geL",
//todo 换授权令牌接口
"accessToken": baiDuToken,
"account_type": 1 "account_type": 1
}; };
let body = {} let body = {}
...@@ -148,8 +179,9 @@ export async function getPVCountBySiteId(siteId) { ...@@ -148,8 +179,9 @@ export async function getPVCountBySiteId(siteId) {
// }; // };
let header = { let header = {
"userName": "shkyzx", "userName": "secsa",
"accessToken": "eyJhbGciOiJIUzM4NCJ9.eyJzdWIiOiJhY2MiLCJhdWQiOiLnmb7luqbnu5_orqEiLCJ1aWQiOjM1OTI5MTE2LCJhcHBJZCI6IjEzYmQ1MDQ5YTY3NmQxMDczNzk1OTkzMjEwMmVjNTU3IiwiaXNzIjoi5ZWG5Lia5byA5Y-R6ICF5Lit5b-DIiwicGxhdGZvcm1JZCI6IjQ5NjAzNDU5NjU5NTg1NjE3OTQiLCJleHAiOjE3MDE0MTE2ODgsImp0aSI6IjgwNDIxODIxOTEzODUxOTA0MjYifQ.fJLIxDxYxTiAwbxSDnDRnYsZckxYJSa__jBtCrbc_aSWRt6sKx70SeOidQeIpFI7", // "accessToken": "eyJhbGciOiJIUzM4NCJ9.eyJzdWIiOiJhY2MiLCJhdWQiOiLnmb7luqbnu5_orqEiLCJ1aWQiOjM1OTI5MTE2LCJhcHBJZCI6IjEzYmQ1MDQ5YTY3NmQxMDczNzk1OTkzMjEwMmVjNTU3IiwiaXNzIjoi5ZWG5Lia5byA5Y-R6ICF5Lit5b-DIiwicGxhdGZvcm1JZCI6IjQ5NjAzNDU5NjU5NTg1NjE3OTQiLCJleHAiOjE3MTc5MDIxMTcsImp0aSI6Ijg1MzMwMzA2MDQ2NjM5ODgyMzIifQ.n9fL-p7m-D60OKIdAvOtGSQgReIW_nlubX-_v8defXAqRSpTT6RzPUdORIjL7geL",
"accessToken": baiDuToken,
"account_type": 1 "account_type": 1
}; };
...@@ -208,7 +240,7 @@ export async function activityStats(startTime:string, endTime:string) { ...@@ -208,7 +240,7 @@ export async function activityStats(startTime:string, endTime:string) {
function baiduStatsResultIsNull(res) { function baiduStatsResultIsNull(res) {
if (!res.body || !res.body.data || !Array.isArray(res.body.data) || !res.body.data[0] ) return true; if (!res.body || !res.body.data || !Array.isArray(res.body.data) || !res.body.data[0] || res.body.data.length == 0 ) return true;
let resData = res.body.data[0]; let resData = res.body.data[0];
if (!resData.result ) return true; if (!resData.result ) return true;
return false; return false;
...@@ -255,3 +287,4 @@ export async function getRecentlyActivityStats(startTime, endTime) { ...@@ -255,3 +287,4 @@ export async function getRecentlyActivityStats(startTime, endTime) {
return resultList; return resultList;
} }
/**
* 获取百度云统计
*/
import { post } from "../../util/request";
const request = require('request');
// OAuth 2.0参数
const appId = "71ed08b13a9ef102b0e0913c37cfbca4";
const secretKey = "e227346a35ff6462f6d74d0b790a3750";
const userId = "55659011";
// 设置轮询间隔时间(毫秒)23小时更新一次
const pollInterval = 3600000*23;
// 授权令牌到期时间
let expiresTime;
// 更新令牌到期时间
let refreshExpiresTime;
/**
* 1、通过董老师提供的申请开发者权限授权审核,授权成功后会跳转www.baidu.com后面拼接获取调取accessToken接口的参数
* 申请开发者权限授权审核链接:https://u.baidu.com/oauth/page/index?platformId=4960345965958561794&appId=71ed08b13a9ef102b0e0913c37cfbca4&scope=1004606&state=7ae0451b2348a65766d08120a2754199&callback=https://www.baidu.com
* 申请开发者权限授权审核的时候需要登录改账号:【百度营销账号:用户名:secsa、密码:Support0!】
* 2、审核通过后跳转链接,例如:
* https://www.baidu.com/?appId=71ed08b13a9ef102b0e0913c37cfbca4
* &authCode=eyJhbGciOiJIUzM4NCJ9.eyJhdWQiOiLmmbrog73liIbmnpDkuozmioDpobXpnaIiLCJzdWIiOiJleGMiLCJ1aWQiOjU1NjU5MDExLCJhcHBJZCI6IjcxZWQwOGIxM2E5ZWYxMDJiMGUwOTEzYzM3Y2ZiY2E0IiwiaXNzIjoi5ZWG5Lia5byA5Y-R6ICF5Lit5b-DIiwicGxhdGZvcm1JZCI6IjQ5NjAzNDU5NjU5NTg1NjE3OTQiLCJleHAiOjE3MTY1MTM5NTMsImp0aSI6Ijg1MjE5NDQ2MDY4NzgyMzY3MjQifQ.PcgpErIhHuH-ichmoxsHPjQAX6pffh8zYxoB6hQVR3rFxAuyriHQwRg6YAEVObEA
* &signature=23ACF7777D5C8D8B216B4F9A2A480579A264633DE09A9CFFE4D2292EC599E9515EBBF4970D1635B5095EA7A65E49DE55F949F766C0A40FDC19EF7B1F149BD1AC18DFB0193D90774E98DAADC68FB0E7BD65BAC3180697AC5EF34823F6DB08988AE1792AF5E3E588A09892DFF63C5A4D126961BEB9AA4E75B4B5178DCA662E7F604F26F7B0DE41E87635F600BE4C11C80A953761217D1621693BFDF6DEA19C8097F26A4EA28033EB809D71EEF3438D2173DA3E6FA706F2564C9AFAEC3E7F075208B25C2B436C1B53F1B64665381D8BF0A0627921FE2ABCC1582791F93815465BDFBCD95F827FA71C649B9975D2A45854F8186F13EB3A9B168E72940E27605BCECC61956993522FDE3AFAF32E15F5656E8127695EDE07541C2612C8B681F81C8F5B854C1568F876BE43DE5636F28FCBA3A0DC665C9B8A1FE15CED12CAE7C1294691A9689664FE52DEECD64D8DADCC9E683BCEBB98EB7F67780AA011A165E686BF43F7C9226F677B0DFF009DAC6131FFCD7DFEDE90AC68FFEBBA36677140D4B79C05A8EC893A98717238F55574A5B7377E3485D7CB509B3B4B21E78AECD252A2054EB0318E04BC87D8E6159750F88F8D62A3022B290BA441CCDB2547824F7C4F24EF6EF6B6FA482D0F3A0F439279D9FE6266D3611524CEE7702B6E6D666A08914E470B8B7711EABB66E1C0632D94681E72F7638537B58607A4AC94AADCC2D4FF6F58A16F106C3FBBC328802C3704D59722D82CC9C97E56CCF60CE38F8354DEE65708038FD934AFE477F3CD721D2ACE909133EE8381D74F2F53C86F5CB19599D369782F779E0937DF3EFBD77CA97EA19968D042739CC92DAFE2C71596D05ABE3C7880A62C91764E28810BD0B4F9230F542C31D5422DF373F35A0F724BEEF731FCEC700714CDCE8926077875849C9D874F95B391A3B6C4F97C49DB36B021F41C3995FC8DEC547D29A93CC9A0C7C2D6FAD5092748ED95B2E11E28D00F64C55A62C4ADFC
* &state=7ae0451b2348a65766d08120a2754199&timestamp=1716512153638&userId=55659011
* 3、拿到authCode作为调用oauth的accessToken接口参数,注意:authCode码有效期为10分钟,且只能使用一次,第二次使用会让改授权码获取的token失效
* 4、调用接口成功后可以拿到授权令牌(accessToken)和更新令牌(refreshToken)
* 授权令牌有效时间为24小时、更新令牌有效时间为30天
* 授权令牌到期前,可以使用更新令牌发一个请求去更新授权令牌,已达到自动更新令牌的效果。更新令牌过期后只能重新进行授权审核
*
* @param authCode
* @returns
*/
export async function getAccessToken(authCode?) {
let url = "https://u.baidu.com/oauth/accessToken";
if(!authCode) authCode = "eyJhbGciOiJIUzM4NCJ9.eyJhdWQiOiLmmbrog73liIbmnpDkuozmioDpobXpnaIiLCJzdWIiOiJleGMiLCJ1aWQiOjU1NjU5MDExLCJhcHBJZCI6IjcxZWQwOGIxM2E5ZWYxMDJiMGUwOTEzYzM3Y2ZiY2E0IiwiaXNzIjoi5ZWG5Lia5byA5Y-R6ICF5Lit5b-DIiwicGxhdGZvcm1JZCI6IjQ5NjAzNDU5NjU5NTg1NjE3OTQiLCJleHAiOjE3MzUyNzIwNDIsImp0aSI6Ii05MTQ1MjY3NjA5ODg5NDIzMzU4In0.TnDXDHCddN10C41VHN4jlHyaB_30LKFyYnboB-7fvPq00y6PltWkVXe1U5tk85kC";
let grantType = "auth_code";
// let accessToken = "eyJhbGciOiJIUzM4NCJ9.eyJzdWIiOiJhY2MiLCJhdWQiOiLmmbrog73liIbmnpDkuozmioDpobXpnaIiLCJ1aWQiOjU1NjU5MDExLCJhcHBJZCI6IjcxZWQwOGIxM2E5ZWYxMDJiMGUwOTEzYzM3Y2ZiY2E0IiwiaXNzIjoi5ZWG5Lia5byA5Y-R6ICF5Lit5b-DIiwicGxhdGZvcm1JZCI6IjQ5NjAzNDU5NjU5NTg1NjE3OTQiLCJleHAiOjQxMDI0MTYwMDAsImp0aSI6IjgyMjcyODc4OTQ0OTk2NTU3MDQifQ.OiL3rJ2zTdFcw3YDvkx5cwvZPF4dz57MVUX9jUwAoSYugckUw5BhttzHFK-OY1OB";
let accessToken = "klnPbCG2Rexuk1e1H1F2wIEsFv6GxiOV@jGObOQvDH1tPIfGkPBzbENGc7dZ68xBR";
let header = {
userName: "secsa",
accessToken
};
let body = {
appId,
authCode,
secretKey,
grantType,
userId
}
let result:any = await post(url, body, header);
let refresh_token = "";
let access_token = "";
if (result.data) {
refresh_token = result.data.refreshToken;
access_token = result.data.accessToken;
expiresTime = result.data.expiresTime;
refreshExpiresTime = result.data.refreshExpiresTime;
}
return {access_token, refresh_token};
}
export async function getRefreshToken(accessToken, refreshToken?) {
// if (!refreshToken) refreshToken = "eyJhbGciOiJIUzM4NCJ9.eyJzdWIiOiJyZWYiLCJhdWQiOiLmmbrog73liIbmnpDkuozmioDpobXpnaIiLCJ1aWQiOjU1NjU5MDExLCJhcHBJZCI6IjcxZWQwOGIxM2E5ZWYxMDJiMGUwOTEzYzM3Y2ZiY2E0IiwiaXNzIjoi5ZWG5Lia5byA5Y-R6ICF5Lit5b-DIiwia2V5SWQiOjExMzMyNTMsInBsYXRmb3JtSWQiOiI0OTYwMzQ1OTY1OTU4NTYxNzk0IiwiZXhwIjoxNzE5MDQ1MzI0LCJqdGkiOiI4NjAwMDE3NDkxNTkyNzk4MjIyIn0.B9d3V06LMFK4oH7SZKXR14z6emIDnnKguUVAlm8uckUvIxg-UZkgZit_ZGaEv48i";
let grantType = "refresh_token";
let url = "https://u.baidu.com/oauth/refreshToken";
// let accessToken = "eyJhbGciOiJIUzM4NCJ9.eyJzdWIiOiJhY2MiLCJhdWQiOiLmmbrog73liIbmnpDkuozmioDpobXpnaIiLCJ1aWQiOjU1NjU5MDExLCJhcHBJZCI6IjcxZWQwOGIxM2E5ZWYxMDJiMGUwOTEzYzM3Y2ZiY2E0IiwiaXNzIjoi5ZWG5Lia5byA5Y-R6ICF5Lit5b-DIiwicGxhdGZvcm1JZCI6IjQ5NjAzNDU5NjU5NTg1NjE3OTQiLCJleHAiOjQxMDI0MTYwMDAsImp0aSI6IjgyMjcyODc4OTQ0OTk2NTU3MDQifQ.OiL3rJ2zTdFcw3YDvkx5cwvZPF4dz57MVUX9jUwAoSYugckUw5BhttzHFK-OY1OB";
let header = {
userName: "secsa",
accessToken
};
let body = {
appId,
refreshToken,
secretKey,
userId
}
let result:any = await post(url, body, header);
let refresh_token = "";
let access_token = "";
if (result.data) {
refresh_token = result.data.refreshToken;
access_token = result.data.accessToken;
expiresTime = result.data.expiresTime;
refreshExpiresTime = result.data.refreshExpiresTime;
}
return {access_token, refresh_token};
}
...@@ -9,28 +9,28 @@ import * as cord from "../crod" ...@@ -9,28 +9,28 @@ import * as cord from "../crod"
const userUrl = './mock/platform.json'; const userUrl = './mock/platform.json';
let token = ""; let token = "eyJhbGciOiJIUzM4NCJ9.eyJzdWIiOiJhY2MiLCJhdWQiOiLmmbrog73liIbmnpDkuozmioDpobXpnaIiLCJ1aWQiOjU1NjU5MDExLCJhcHBJZCI6IjcxZWQwOGIxM2E5ZWYxMDJiMGUwOTEzYzM3Y2ZiY2E0IiwiaXNzIjoi5ZWG5Lia5byA5Y-R6ICF5Lit5b-DIiwicGxhdGZvcm1JZCI6IjQ5NjAzNDU5NjU5NTg1NjE3OTQiLCJleHAiOjE3MzQ0ODQ2MTYsImp0aSI6Ii05MTQ1NzM1NjkyNjA1MjA1MTgzIn0.8dAwCSwvfqnAH0bY46ASZAXFxxh7y6EDQXSvtLntxNQqAuxIuYxiffy9ybXfTNV-";
let tokenTime = 0;//有效时间 let tokenTime = 0;//有效时间
let lastTime = 0;//上一次时间 let lastTime = 0;//上一次时间
const timeOutTime = 50;//超时时间s const timeOutTime = 50;//超时时间s
async function get获取token() { async function get获取token() {
let time = new Date().valueOf(); // let time = new Date().valueOf();
if ( (Math.ceil((time - lastTime)/1000 ) + timeOutTime )> tokenTime ) { // if ( (Math.ceil((time - lastTime)/1000 ) + timeOutTime )> tokenTime ) {
let url = getUrl(urlEnum.获取token); // let url = getUrl(urlEnum.获取token);
let head = {}; // let head = {};
let body = {client_id:requestConfig.client_id, client_secret:requestConfig.client_secret}; // let body = {client_id:requestConfig.client_id, client_secret:requestConfig.client_secret};
let result:any = await postForm(url, body, head); // let result:any = await postForm(url, body, head);
if (!result || !result.access_token || !result.expires_in) { // if (!result || !result.access_token || !result.expires_in) {
throw new BizError(`获取token 失败: ${JSON.stringify(result)}`, ); // throw new BizError(`获取token 失败: ${JSON.stringify(result)}`, );
} // }
token = result.access_token; // token = result.access_token;
tokenTime = result.expires_in; // tokenTime = result.expires_in;
lastTime = time; // lastTime = time;
console.log("获取一次token",`token${token}, lastTime ${lastTime}, time ${time}, tokenTime ${tokenTime}, `); // console.log("获取一次token",`token${token}, lastTime ${lastTime}, time ${time}, tokenTime ${tokenTime}, `);
} // }
} }
......
...@@ -78,6 +78,7 @@ async function getSiteInfoStats(isFirst) { ...@@ -78,6 +78,7 @@ async function getSiteInfoStats(isFirst) {
statsList.sort( (a, b) => {return b.count - a.count}); statsList.sort( (a, b) => {return b.count - a.count});
statsQueue["应用监控"] = statsList; statsQueue["应用监控"] = statsList;
console.log(statsList);
statsQueue["应用系统数"] = statsList.length; statsQueue["应用系统数"] = statsList.length;
statsQueue["应用系统监控趋势"] = alyData.todayAvailabilityList; statsQueue["应用系统监控趋势"] = alyData.todayAvailabilityList;
let todayAlyStatsData = [ let todayAlyStatsData = [
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
import { getHealthParameter, getSecondPhaseUrl, healthEnum, healthTokenEnum } from "../url"; import { getHealthParameter, getSecondPhaseUrl, healthEnum, healthTokenEnum } from "../url";
import * as defaultConf from "../../../config/healthConfig" import * as defaultConf from "../../../config/healthConfig"
import moment = require("moment"); import moment = require("moment");
import { post } from "../cronJob"; import { getInterfaceByInterfaceName, post } from "../cronJob";
export async function getStuData() { export async function getStuData() {
let {body, headers} = getHealthParameter(healthEnum.学生数班级数, healthTokenEnum.学生数班级数); let {body, headers} = getHealthParameter(healthEnum.学生数班级数, healthTokenEnum.学生数班级数);
......
...@@ -88,7 +88,7 @@ export enum urlEnum { ...@@ -88,7 +88,7 @@ export enum urlEnum {
资源可用性="/service/api/kyzx/zykyx", 资源可用性="/service/api/kyzx/zykyx",
资源使用率趋势="/service/api/kyzx/zysylqs", 资源使用率趋势="/service/api/kyzx/zysylqs",
重要活动保障列表="/service/api/kyzx/zyhdbzlb", 重要活动保障列表="/service/api/kyzx/zyhdbzlb",
获取accesstoken="", 获取accesstoken="klnPbCG2Rexuk1e1H1F2wIEsFv6GxiOV@jGObOQvDH1tPIfGkPBzbENGc7dZ68xBR",
权限列表="" 权限列表=""
}; };
......
/**
* 上海市学生素质教育优质资源平台
*/
import { planarArrDecollateForIndex, planarArrDeconstruct, planarArrForObjectList } from "../../dataPackage/planaryArrayAnalysis";
import { onceSheetBecomeOfblockData, onceSheetBecomeOfblockDataToUrl } from "../../util/analysisExcel";
function packageDataProcess(blockDataList, titltListConfig, keyValueOrTitleList, barChartList, stringList, decollatePlanarList) {
let result = {};
for (let i = 0; i < blockDataList.length; i++) {
let {blockData, blockTitle} = blockDataList[i];
if (keyValueOrTitleList.indexOf(blockTitle) > -1) {
let titleList = titltListConfig[blockTitle] || [];
result[blockTitle] = planarArrForObjectList(blockData, 0, titleList);
}
else if (barChartList.indexOf(blockTitle) > -1) {
result[blockTitle] = planarArrDeconstruct(blockData);
}
else if (stringList.indexOf(blockTitle) > -1) result[blockTitle] = planarArrForObjectList(blockData);
else if (decollatePlanarList.indexOf(blockTitle) > -1) result[blockTitle] = planarArrDecollateForIndex(blockData);
}
return result;
}
export function weeklyPlayTableData() {
let blockDataList = onceSheetBecomeOfblockData('上海市学生素质教育优质资源平台.xlsx', 'Sheet1');
let keyValueOrTitleList = ['课程来源情况', '课程适用年级段', '课程领域分布', '课程投放平台', '基础数据', '课程播放情况', '课程反馈', '在线公益课程评分', '热门标签']; //适配 饼图 键值以及需要多个Key的
let barChartList = ['课程类别(艺术)', '平台播放量趋势', '平台播放量趋势(直播)', '平台播放量趋势(回放)', '课程收藏/转发量', '课程类型热度排行(本周)']; //适配 柱状图 折线图
let stringList = [];
let decollatePlanarList = ['热门课程排行top10(本周)']; //适配 表格
let titleListConfig = {};
let result = packageDataProcess(blockDataList, titleListConfig, keyValueOrTitleList, barChartList, stringList, decollatePlanarList);
return result;
}
export function curriculumTableData() {
let blockDataList = onceSheetBecomeOfblockData('上海市学生素质教育优质资源平台.xlsx', 'Sheet2');
let keyValueOrTitleList = ['课程数据']; //适配 饼图 键值以及需要多个Key的
let barChartList = []; //适配 柱状图 折线图
let stringList = [];
let decollatePlanarList = ['']; //适配 表格
let titleListConfig = {};
let result = packageDataProcess(blockDataList, titleListConfig, keyValueOrTitleList, barChartList, stringList, decollatePlanarList);
return result;
}
export function getDataByName(xlsName) {
let blockDataList = onceSheetBecomeOfblockDataToUrl(`${xlsName}.xlsx`, 'Sheet1', '/就业服务记录');
let keyValueOrTitleList = ['']; //适配 饼图 键值以及需要多个Key的
let barChartList = []; //适配 柱状图 折线图
let stringList = [];
let decollatePlanarList = []; //适配 表格
let titleListConfig = {};
let result = packageDataProcess(blockDataList, titleListConfig, keyValueOrTitleList, barChartList, stringList, decollatePlanarList);
return result;
}
...@@ -15,6 +15,7 @@ export function initUser() { ...@@ -15,6 +15,7 @@ export function initUser() {
//登录账号之后,校验是否有变更 //登录账号之后,校验是否有变更
export function addUserInfo(sub, phone, name, isAdmin, otherPage) { export function addUserInfo(sub, phone, name, isAdmin, otherPage) {
console.log(userQueue[sub]);
let oldUser = userQueue[sub]; let oldUser = userQueue[sub];
if (oldUser) { if (oldUser) {
if (oldUser.phone != phone || oldUser.name != name || oldUser.isAdmin != isAdmin) { if (oldUser.phone != phone || oldUser.name != name || oldUser.isAdmin != isAdmin) {
......
//打包完数据之后的处理
/**
* recombinationObject 重组对象 在打包完数据后使用 必须是keyvalue之后
* @param data [{key:key1, value:value1, unit:unit1 }, {key:key2, value:value2, unit:unit2}]
* @param check {"key2":[{key:"key1", name:""}] }
* @returns [{key:key1, value:value1, key2:key2, value2:value2}]
*/
export function recombinationObject(data, checkInfo) {
let dataMap = {};
data.forEach(info => {
let { key } = info;
dataMap[key] = info;
});
let removeKeyMap = {};
for (let checkKey in checkInfo) {
let checkList = checkInfo[checkKey];
checkList.forEach(item => {
let {key, name} = item;
removeKeyMap[key] = 1;
let onceCheck = dataMap[key];
dataMap[checkKey][name] = onceCheck.value;
dataMap[checkKey][`${name}Unit`] = onceCheck.unit;
});
}
let dataList = [];
data.forEach(info => {
let { key } = info;
if (removeKeyMap[key]) return;
dataList.push(dataMap[key]);
});
return dataList;
}
/**
* 修改表格数据结构
* @param titleList
* @param dataList
* @returns
*/
export function change(titleList, dataList) {
let data = [];
dataList.forEach(subList => {
let onceData:any = {};
subList.forEach( (item, index)=> {
let key = titleList[index];
onceData[key] = item;
} );
data.push(onceData);
});
return data;
}
/**
* 获取单条线路数据
* @param line 线路
* @param data 数据
* @param conf 配置
* @returns
*/
export function getLineOneData(line, data, conf) {
let result:any = {};
data.forEach(item => {
let dataLine = item.line;
if (line == dataLine) {
for (let name = 0; name < conf.length; name++) {
result[conf[name]] = item[conf[name]];
}
}
});
return result;
}
/**
* 单条弹窗数据
* @param line 线路
* @param data 数据
* @param conf 配置
* @returns
*/
export function getPopupOneData(line, data, conf) {
let result:any = {};
data.forEach(item => {
let dataLine = item.line;
let dataSite = item.site;
if (line == dataLine) {
if (!result[dataSite]) result[dataSite] = {};
for (let name = 0; name < conf.length; name++) {
result[dataSite][conf[name]] = item[conf[name]];
}
}
});
return result;
}
/**
* 多条弹窗数据
* @param line
* @param data
* @param conf
* @returns
*/
export function getPopupMoreData(line, data, conf) {
let result:any = {};
data.forEach(item => {
let dataLine = item.line;
let dataSite = item.site;
let pipelineRelocationData = {};
if (line == dataLine) {
if (!result[dataSite]) result[dataSite] = {site:item.site, state:item.state, data:[]};
for (let name = 0; name < conf.length; name++) {
pipelineRelocationData[conf[name]] = item[conf[name]];
}
result[dataSite]["data"].push(pipelineRelocationData);
}
});
return result;
}
/**
* 弹窗详细数据
* @param id
* @param tableData
* @param changeConf
* @param conf
* @returns
*/
export function getPopupDetailsData(id, tableData, changeConf, conf, name) {
let details:any = {};
for (let key in tableData) {
if (id == key) {
let data = change(changeConf, tableData[key].bodyList );
data.forEach(item => {
let itemName = item[name];
let detailsData = {};
if (!details[itemName]) details[itemName] = [];
for (let name = 0; name < conf.length; name++) {
detailsData[conf[name]] = item[conf[name]];
}
details[itemName].push(detailsData);
});
}
}
let detailsList = [];
for (let key in details) {
detailsList.push({name: key, dataList: details[key]})
}
return detailsList;
}
\ No newline at end of file
//out 前置逻辑
import { BizError } from "../util/bizError";
import { separateDataAndUint } from "./tool";
/**
* stringListPackage 打包验证并返回 getStringOut 需要的格式
* @param dataList [{key, value},{}]
* @param keyName
* @returns ["","",""]
*/
export function stringListPackage(dataList, keyName = "value") {
let result = [];
dataList.forEach(info => {
result.push(info[keyName]);
});
return result;
}
/**
* onceYBarChartPackage 打包验证并返回 getOnceYBarChartOut 需要的格式
* @param dataList [{name:"", data:[{key, value}...] }]
* @param inYUnit y轴单位
* @param inXUnit x轴单位
* @returns {xUnit:x轴单位, yUnit:y单位, dataInfo:{"图表名称":[{key:"数据key", value:"数据值", unit:"单位" }, {key:"数据key", value:"数据值", unit:"单位" } ] } }
*/
export function onceYBarChartPackage(inDataList, inYUnit, inXUnit="") {
let dataInfo = {};
const InYUnitIsNull = !inYUnit;
let checkingDataHaveUnitMap = {};
let yUnit = "";
inDataList.forEach(info => {
let name = info.name;
let data = info.data;
checkingError({name, data}, errorEnum.必要参数);
let onceDataList = [];
//判空 去重
let distinctMap = {};
//验证工作
data.forEach(subInfo => {
let key = subInfo.key;
let value = subInfo.value;
checkingError({name, key}, errorEnum.数据key是否为空);
checkingError({name, value}, errorEnum.数据value是否为数值);
checkingError({name, distinctMap, key}, errorEnum.barChartx轴的key重复出现);
distinctMap[key] = 1;
let {dataNum, dataUnit} = separateDataAndUint(value);
checkingDataHaveUnitMap[dataUnit] = 1;
onceDataList.push({key, value:dataNum, unit:dataUnit|| "" });
});
dataInfo[name] = onceDataList;
});
let dataUnitList = Object.keys(checkingDataHaveUnitMap);
let dataHaveUnitCount = dataUnitList.length;
if (!dataHaveUnitCount && InYUnitIsNull ) {
//todo 这里可以加逻辑 挖个坑 可以读取表格里面的所有单位取出现最多的
} else if(dataHaveUnitCount> 1) throw new BizError(`在 onceYBarChartPackage 中 单个y轴的柱状图中出现多个单位:${JSON.stringify(dataUnitList)}`);
else {
yUnit = dataUnitList[0] || inYUnit;
for (let key in dataInfo) {
dataInfo[key].forEach(info => {
info.unit = yUnit;
});
}
}
return {xUnit:inXUnit, yUnit, dataInfo };
}
/**
* doubleYBarCharPackage 打包验证并返回 getDoubleYBarChartOut 需要的格式
* @param inLeftYUnit
* @param inRightYUnit
* @param data [{name:"", data:[{key, value}...] }]
* @param rightNameList ["name", name] 右边y轴的名称
* @returns {xUnit:x轴单位, leftYUnit:左边y单位, rightYUnit:右边y单位 dataInfo:{"图表名称":{from:"left", subList:[{key:"数据key", value:"数据值", unit:"单位" }, {key:"数据key", value:"数据值", unit:"单位" } ]} } }
*/
export function doubleYBarCharPackage(data, rightNameList, inLeftYUnit, inRightYUnit, xUnit = "") {
let leftAndRightDistinctMap = {};//比对两种图表名称有没有冲突
let dataInfo = {};
let leftUnitDistinctMap = {};
let rightUnitDistinctMap = {};
function checkOnceData(subFunCheckingList, dataType) {
subFunCheckingList.forEach(info => {
let name = info.name;
let data = info.data;
checkingError({name, data}, errorEnum.必要参数);
if (leftAndRightDistinctMap[name]) throw new BizError(`在 doubleYBarCharPackage 中leftYData 和 rightYData 重复出现了 ${name}`);
leftAndRightDistinctMap[name] = 1;
let subList = [];
let distinctMap = {};
data.forEach(subInfo => {
let key = subInfo.key;
let value = subInfo.value;
checkingError({name, key}, errorEnum.数据key是否为空);
checkingError({name, value}, errorEnum.数据value是否为数值);
checkingError({name, distinctMap, key}, errorEnum.barChartx轴的key重复出现);
distinctMap[key] = 1;
let {dataNum, dataUnit} = separateDataAndUint(value);
if (dataUnit) dataType == "left" ? leftUnitDistinctMap[dataUnit] = 1 : rightUnitDistinctMap[dataUnit] = 1;
subList.push({key, value:dataNum, unit:dataUnit || ""});
});
dataInfo[name] = {from:dataType, subList};
});
}
let leftYData = [];
let rightYData = [];
data.forEach(info => {
let {name} = info;
if (rightNameList.indexOf(name) > -1 ) rightYData.push(info);
else leftYData.push(info);
});
checkOnceData(leftYData, "left");
checkOnceData(rightYData, "right");
let leftUnitList = Object.keys(leftUnitDistinctMap);
let leftUnitCount = leftUnitList.length;
let rightUnitList = Object.keys(rightUnitDistinctMap);
let rightUnitCount = rightUnitList.length;
if (leftUnitCount > 1) throw new BizError(`在 onceYBarChartPackage 中 双y轴的柱状图中 leftData数据中出现了多个单位:${JSON.stringify(leftUnitList)}`);
if (rightUnitCount > 1) throw new BizError(`在 onceYBarChartPackage 中 双y轴的柱状图中 rightData数据中出现多个单位:${JSON.stringify(rightUnitList)}`);
let leftYUnit = leftUnitList[0] || inLeftYUnit;
let rightYUnit = rightUnitList[0] || inRightYUnit;
for (let key in dataInfo) {
let {from } = dataInfo[key];
dataInfo[key].subList.forEach(info => {
if (from == "left") info.unit = leftYUnit;
else info.unit = rightYUnit;
});
}
return {xUnit, leftYUnit, rightYUnit, dataInfo };
}
/**
* tablePackage 获得 getTableOut 需要的数据
* @param titleList ["","","",""]
* @param data [[a,b,c],[a,b,c],[a,b,c],[a,b,c]]
* @returns {titleList:[], dataList:[{a,b,c},{a,b,c},{a,b,c}] }
*/
export function tablePackage(titleList, data) {
var aForZkeyList = [];
for(var i = 65; i < 91; i++){
aForZkeyList.push(String.fromCharCode(i));
}
//验证长度
let dataMaxLenght = 0;
let dataList = [];
data.forEach(subDataList => {
let onceData = {};
subDataList.forEach((info, index) => {
let key = aForZkeyList[index];
onceData[key] = info || "";
});
dataMaxLenght = Math.max(dataMaxLenght, subDataList.length);
dataList.push(onceData);
});
if (titleList.length < dataMaxLenght) throw new BizError( `在 tablePackage 中 titleList长度比单个data最大长度小 titleList长度 ${titleList.length} 单个数据个数 ${dataMaxLenght}"`);
return {titleList, dataList};
}
/**
* keyValuePackage 将返回 getKeyValueOut 所需要的数据格式
* @param dataList [{key, value}]
* @returns [{key:"", value:"", unit:""}]
*/
export function keyValuePackage(dataList) {
let data = [];
dataList.forEach(info => {
let key = info.key;
let value = info.value;
checkingError({value, key}, errorEnum.数据key是否为空);
let {dataNum, dataUnit} = separateDataAndUint(value);
let analysisValue;
let analysisUnit;
if (isNaN(dataNum) || dataUnit == value){
analysisValue = value;
analysisUnit = "";
} else {
analysisValue = dataNum;
analysisUnit = dataUnit;
}
data.push({key, value:analysisValue, unit:analysisUnit });
});
return data;
}
/**
* objectListPackage 将返回 getObjectListOut 所需要的数据格式
* @param dataList [{key...}]
* @returns [{key...}]
*/
export function objectListPackage(dataList) {
let data = [];
dataList.forEach(info => {
let addInfo = {};
for (let key in info) {
checkingError({key, value:info[key]}, errorEnum.值为undefinednull);
addInfo[key] == info;
}
data.push(addInfo);
});
return data;
}
/**
* rankPackage 将返回 getRankOut 需要的数据
* @param orderIsDesc 默认 true desc(降序,从大到小)
* @param data [{key, value, details}]
* @param max 最大值
* @param unit 单位
* @returns {unit, max, dataInfo:[{key, value, details, unit}, {}, {}, {}] }
*/
export function rankPackage(data, orderIsDesc = true, unit?, max?) {
let dataInfo = [];
let valueIsString = false;
let dataUnitDistinctMap = {};
data.forEach( info => {
let key = info.key;
let value = info.value;
let details = info.details || "";
let onceUnit = "";
checkingError({key}, errorEnum.数据key是否为空);
if ((value == undefined || value == null) || `${value}`.search(/^(-)?\d+(\.\d+)?/) == -1 ) {
valueIsString = true;
} else {
let {dataNum, dataUnit} = separateDataAndUint(value);
if (dataUnit) {
dataUnitDistinctMap[dataUnit] = 1;
onceUnit = dataUnit;
}
value = dataNum;
}
dataInfo.push({key, value, details, unit:onceUnit});
});
let dataUnitList = Object.keys(dataUnitDistinctMap);
if (dataUnitList.length > 1) throw new BizError(`在 rankPackage 中 数据中的value解析出来不统一的单位:${JSON.stringify(dataUnitList)}`);
if (dataUnitList.length && unit && unit != dataUnitList.length) throw new BizError(`在 rankPackage 中 入参单位${unit} 与 数据中解析出来的单位 ${dataUnitList[0]} 不一致`);
let dataUnit = dataUnitList[0] || unit;
//统一单位
dataInfo.forEach(info => {info.unit = dataUnit});
if (!valueIsString) {
dataInfo.sort( (a, b) => {
return orderIsDesc ? b.value - a.value : a.value - b.value;
});
}
return {unit:dataUnit, max:max || 0, dataInfo};
}
/**
* radarChartPackage 将会返回 getRadarChartOut 需要的数据
* @param data [{key, value, max}]
* @returns [{key, value, max, unit}]
*/
export function radarChartPackage(data) {
let dataList = [];
data.forEach(info => {
let key = info.key;
let value = info.value;
let max = info.max;
checkingError({key}, errorEnum.数据key是否为空);
checkingError({name:key, value}, errorEnum.数据value是否为数值);
let {dataNum, dataUnit} = separateDataAndUint(value);
dataList.push({key, value:dataNum, unit:dataUnit, max});
});
return data;
}
/**
* mapPackage 返回 getMapOut 所需要的数据
* @param data [{key:数据名称, x:x坐标, y:坐标, longitude:经度, latitude:纬度, value:值, details:补充}]
* @returns [{name:数据名称, x:x坐标, y:坐标, coordinate:[经度, 纬度], unit:单位, value:值, details:"补充"}]
*/
export function mapPackage(data, isCoordinate=true, isXY=false) {
let dataList = [];
data.forEach((info, index) => {
checkingError({key:info.key}, errorEnum.数据key是否为空);
let longitude = info.longitude;
let latitude = info.latitude;
let x = info.x;
let y = info.y;
let addInfo:any = {key:info.key, details:info.details || ""};
checkingError({x, y, longitude, latitude, index}, errorEnum.地图坐标判空);
if (isCoordinate) {
longitude = isUndefinedOrNull(longitude) ? 0 : longitude;
latitude = isUndefinedOrNull(latitude) ? 0 : latitude;
let coordinate = [longitude, latitude];
addInfo.coordinate = coordinate;
}
if (isXY) {
x = isUndefinedOrNull(x) ? 0 : x;
y = isUndefinedOrNull(y) ? 0 : y;
addInfo.x = x;
addInfo.y = y;
}
let value;
let unit = "";
if (info.value && `${info.value}`.search(/^(-)?\d+(\.\d+)?/) > -1) {
let {dataNum, dataUnit} = separateDataAndUint(info.value);
value = dataNum;
unit = dataUnit;
} else if (info.value && `${info.value}`.search(/^(-)?\d+(\.\d+)?/) == -1) {
value = info.value;
} else value = "";
addInfo.value = value;
addInfo.unit = unit;
dataList.push(addInfo);
});
return dataList;
}
/**
* scatterFigurePackage 返回 getScatterFigureOutData 需要的格式
* @param data [{x, y, name}, {x, y, name}, {x, y, name}, {x, y, name}]
* @returns [{x, y, name}, {x, y, name}, {x, y, name}, {x, y, name}]
*/
export function scatterFigurePackage(data) {
let dataList = [];
data.forEach((info, index) => {
let x = info.x;
let y = info.y;
checkingError({x, y, index}, errorEnum.散点图判空);
dataList.push({x, y, name:info.name || ""});
});
return dataList;
}
enum errorEnum {
必要参数 = 1,
数据key是否为空,
数据value是否为数值,
类型为string,
barChartx轴的key重复出现,
值为undefinednull,
地图坐标判空,
散点图判空
};
function checkingError(param, errorEnumType) {
let str = ``;
let isError = false;
switch(errorEnumType) {
case errorEnum.类型为string:
if ( typeof param.str != "string") {
isError = true;
str += `下标为${param.index}的数据 不为string,当前为${param.str}`;
}
break;
case errorEnum.必要参数:
let paramNullErrorStr = '必要参数: ';
for (let key in param) {
if (!param[key]) {
isError = true;
paramNullErrorStr += `${key}为空 `;
}
}
str += paramNullErrorStr;
break;
case errorEnum.数据key是否为空 :
if (!param.key) {
isError = true;
str += `${param.name}中有key缺失数据`;
}
break;
case errorEnum.数据value是否为数值:
if (`${param.value}`.search(/^(-)?\d+(\.\d+)?/) == -1) {
isError = true;
str += `${param.name}中 key为${param.key} 的数据为字符串`;
}
break;
case errorEnum.barChartx轴的key重复出现:
if (param.distinctMap[param.key]) {
isError = true;
str += `${param.name}中 key为${param.key} 在数据中重复出现`;
}
break;
case errorEnum.值为undefinednull:
if ( isUndefinedOrNull(param.value) ) {
isError = true;
str += `${param.key}的值 为 undefined 或 null`;
}
break;
case errorEnum.地图坐标判空:
if (isUndefinedOrNull(param.x) && isUndefinedOrNull(param.y) && isUndefinedOrNull(param.longitude) && isUndefinedOrNull(param.latitude)) {
isError = true;
str += `第${param.index+1}个数据中坐标异常 所有表示坐标的属性都为空`;
}
if ( (isUndefinedOrNull(param.x) || isUndefinedOrNull(param.y)) && isUndefinedOrNull(param.longitude) || isUndefinedOrNull(param.latitude) ) {
isError = true;
str += `第${param.index+1}个数据中坐标异常 xy坐标缺失的同时经纬度也缺失`;
}
break;
case errorEnum.散点图判空:
if (isUndefinedOrNull(param.x) || isUndefinedOrNull(param.y)) {
isError = true;
str += `第${param.index+1}个数据中坐标异常 x为${param.x} y为${param.y}`;
}
break;
}
if (isError) {
throw new BizError(str);
}
}
function isUndefinedOrNull(paramater) {
return paramater == undefined || paramater == null;
}
\ No newline at end of file
/**
* changeObjectToList 将对象形式的数据转换为keyvalue的数组 对象中的键名称将作为key 传入mapping时 使用对应的change作为key的值
* @param data 数据{key1:value1, key2:value2, key3:value3...}
* @param reflect 对应关系 [{key:"key1",change:"名称1"},{key:"key2", change:"名称2"},{key:"key3", change:"名称3"}]
* @returns [{key:"名称1", value:value1}, {key:"名称2", value:value2}, {key:key3, value:value3}]
*/
export function changeObjectToList(data, reflect?) {
let keyList = [];
if (!reflect || !reflect.length) {
for (let key in data) {
keyList.push({key, change:key});
}
}
let dataList = [];
keyList.forEach(info => {
let {key, change} = info;
let value = data[key];
if (value) dataList.push({ key:change, value:`${value}`});
});
return dataList;
}
/**
* changeObjectKey 按mapping的对应关系修改 data中的key 如果对应关系中找不到,则会使用原来的key
* @param data {key1:value1, key2:value2, key3:value3...}
* @param reflect {"key1":"名称1", "key2":"名称2", "key3":"名称3"}
* @returns {"名称1":value1, "名称2":value2, "名称3":value3}
*/
export function changeObjectKey(data, reflect) {
let result = {};
for (let key in data) {
let changeKey = reflect[key] || key;
result[changeKey] = `${data[key]}`;
}
return result;
}
/**
* changeListObjectToListByReflect 将data中的object的key替换成 reflect对应的值
* @param data [{key1:value1, key2:value2...}, {key1:value1, key2:value2...}, {key1:value1, key2:value2...}]
* @param reflect 映射 不传就不会替换 {"key1":"名称1", "key2":"名称2", "key3":"名称3"}
* @returns [{"名称1":value1, "名称2":value2...}, {"名称1":value1, "名称2":value2...}, {"名称1":value1, "名称2":value2...}]
*/
export function changeListObjectToListByReflect(data, reflect?) {
let dataList = [];
if (!reflect) return dataList;
data.forEach(item => {
let changeInfo = {};
for (let key in item) {
let newKey = reflect[key] || key;
changeInfo[newKey] = `${item[key]}`;
}
dataList.push(changeInfo);
});
return dataList;
}
/**
* getDesignativByReflect 获取data中指定的的key
* @param data [{key1:value1, key2:value2, key3:value3...}, {key1:value1, key2:value2, key3:value3...}, {key1:value1, key2:value2, key3:value3...}] 或者 {key1:value1, key2:value2, key3:value3...}
* @param reflect List 映射 必须参数 ["key1", "key2"] 为key的名称
* @returns [{key1:value1, key2:value2, ...}, {key1:value1, key2:value2, ...}, {key1:value1, key2:value2, ...}]
*/
export function getDesignativByReflect(data, reflect) {
if (typeof data != "object") return data;
let type = Array.isArray(data) ? "array" : "object";
if ((type == "array" && !reflect.length) || (type == "object" && !Object.keys(reflect) ) ) return data;
let reflectMap = {};
reflect.forEach(keyName => {reflectMap[keyName] = 1});
if (type=="array") {
let dataList = [];
data.forEach(item => {
let once = {};
for (let key in item) {
if (!reflectMap[key]) continue;
once[key] = item[key];
}
dataList.push(once);
});
return dataList;
} else {
let dataInfo = {};
for(let key in reflectMap) {
if (data[key]) dataInfo[key] = data[key];
}
return dataInfo;
}
}
/**
* designativListKeyAddUnit为集合中指定的key添加单位
* @param data [{key1:value1, key2:value2, key3:value3...}, {key1:value1, key2:value2, key3:value3...}, {key1:value1, key2:value2, key3:value3...}]
* @param reflect {key1:"%", key2:"个"}
* @returns [{key1:"value1%", ke2:"value2个", keys:"value3"}]
*/
export function designativListKeyAddUnit(data, reflect) {
let dataList = [];
data.forEach(item => {
let onceData = {};
for (let key in item) {
let unit = reflect[key] || '';
onceData[key] = `${item[key]}${unit}`
}
dataList.push(onceData);
});
return dataList;
}
\ No newline at end of file
import { separateDataAndUint, unifiedMaxAndMinValueAndStep } from "./tool";
//数据出口封装 只做封装 少量的数据校验
/**
* getStringOut 获取文字列表返回结果
* @param title 数据标题
* @param data 数据体 格式:["txt...", "str..."]
* @returns {title, dataList:[string...]}
*/
export function getStringOut(title, data) {
let dataList = [];
data.forEach( (str) => {
dataList.push(str);
});
return { title, dataList};
}
/**
* getOnceYBarChartOut 获取单y轴柱状图
* @param title 数据标题
* @param data 数据体 格式: {xUnit:x轴单位, yUnit:y单位, dataInfo:{"图表名称":[{key:"数据key", value:"数据值", unit:"单位" }, {key:"数据key", value:"数据值", unit:"单位" } ] } }
* @returns {title:标题, xUnit:x轴单位, yUnit:y轴单位, yMinValue:最小值, yMaxValue:最大值, yStepValue:间隔,
* chartList:[{thisChartTitle:数据名称, total:总数, unit:单位, dataList:[{name:y轴名称, value:值, unit:单位}] } ]}
* 入参data里面的dataInfo中的unit可以为空 会读取yUnit 所以入参优先度 yUnit > unit 默认值都是空字符串
*/
export function getOnceYBarChartOut(title, data, stepCount?) {
let chartList = [];
let {xUnit, yUnit, dataInfo} = data;
let thisYUnit = yUnit ||"";
let min = new Date().valueOf();
let max = 0;
for (let dataName in dataInfo) {
let onceChartList = dataInfo[dataName];
let dataList = [];
let total = 0;
onceChartList.forEach(item => {
let {key, value, unit} = item;
min = Math.min(value, min);
max = Math.max(value, max);
total += parseInt(value);
dataList.push({name:key, value, unit: unit || thisYUnit});
});
chartList.push({thisChartTitle:dataName, total, unit:thisYUnit, dataList});
}
let {maxNumber, minNumber, stepNumber} = unifiedMaxAndMinValueAndStep(max, min, stepCount);
return {title, xUnit, yUnit:thisYUnit, yMinValue:minNumber, yMaxValue:maxNumber, yStepValue:stepNumber, chartList};
}
/**
* getDoubleYBarChartOut 获取双y轴柱状图
* @param title 数据标题
* @param data 数据体 格式:{xUnit:x轴单位, leftYUnit:左边y单位, rightYUnit:右边y单位 dataInfo:{"图表名称":{from:"left", subList:[{key:"数据key", value:"数据值", unit:"单位" }, {key:"数据key", value:"数据值", unit:"单位" } ]} } }
* @returns {title:标题, xUnit:x轴单位, leftYUnit:左边单位, rightYUnit:右边单位, leftYMinValue:左边最小值, leftYMaxValue:左边最大值, leftYStepValue:左边间隔,
* rightYMinValue:右边最小值, rightYMaxValue:右边最大值, rightYStepValue:右边间隔,
* dataList:[{subTitle:数据名称, total:总数, unit:单位, subDataList:[{name:y轴名称, value:值, unit:单位}] }] }
* 入参data里面的dataInfo中的unit可以为空 会读取yUnit 所以入参优先度 yUnit > unit 默认值都是空字符串
*/
export function getDoubleYBarChartOut(title, data, stepCountInfo?) {
stepCountInfo = stepCountInfo || {left:5, right:5};
let dataList = [];
let {xUnit, leftYUnit, rightYUnit, dataInfo} = data;
let thisLeftYUnit = leftYUnit || "";
let thisRightYUnit = rightYUnit || "";
let leftMin = new Date().valueOf();
let leftMax = 0;
let rightMin = new Date().valueOf();
let rightMax = 0;
for (let dataName in dataInfo) {
let {subList, from} = dataInfo[dataName];
let subDataList = [];
let total = 0;
let thisDataUnit = from == "left" ? thisLeftYUnit : thisRightYUnit;
subList.forEach(item => {
let {key, value, unit} = item;
if (from == "left") {
leftMin = Math.min(value, leftMin);
leftMax = Math.max(value, leftMax);
} else {
rightMin = Math.min(value, rightMin);
rightMax = Math.max(value, rightMax);
}
total += value;
subDataList.push({name:key, value, unit:unit || thisDataUnit});
});
dataList.push({subTitle:dataName, total, unit:thisDataUnit, subDataList});
}
let leftInfo = unifiedMaxAndMinValueAndStep(leftMax, leftMin,stepCountInfo.left);
let rightInfo = unifiedMaxAndMinValueAndStep(rightMax, rightMin,stepCountInfo.right);
return {title, xUnit, leftYUnit:thisLeftYUnit, rightYUnit:thisRightYUnit, leftYMinValue:leftInfo.minNumber, leftYMaxValue:leftInfo.maxNumber, leftYStepValue:leftInfo.stepNumber,
rightYMinValue:rightInfo.minNumber, rightYMaxValue:rightInfo.maxNumber, rightYStepValue:rightInfo.stepNumber, dataList}
}
/**
* getTableOut 获取列表返回
* @param title 数据标题
* @param data 数据体 格式:{titleList:[], dataList:[{a,b,c},{a,b,c},{a,b,c}] }
* @returns {title:数据标题, total:数据总条数, titleList:[表头...], valueList:[[a,b,c,d...],[a,b,c,d...]] }
* 解出来的对象的key是需要有顺序的,所以进这里之前要把值a-z排好序,按显示要求排序,
*/
export function getTableOut(title, data) {
let {titleList, dataList} = data;
let valueList = [];
dataList.forEach(info => {
let subList = [];
for (let key in info) {
subList.push(info[key]);
}
valueList.push(subList);
});
return { title, total:dataList.length, titleList, valueList };
}
/**
* getKeyValueOut 获取键值的返回结果
* @param title 数据标题
* @param data 数据体 [{key:"", value:"", unit:""}]
* @returns {title:数据标题, dataList:[], total:数据值总数, count:数据总条数 }
*/
export function getKeyValueOut(title, data) {
let dataList = [];
let total = 0;
data.forEach(info => {
let {key, value, unit} = info;
let typeChangeValue;
if (!isNaN(value)) {
typeChangeValue = parseFloat(value);
total+= typeChangeValue;
} else typeChangeValue = value;
dataList.push({name:key, value: Math.round(typeChangeValue * 100) /100, unit});
});
return {title, total: Math.round(total * 100) /100, count:dataList.length, dataList};
}
/**
* getObjectListOut 获取对象数组结果
* @param title 数据标题
* @param data 数据体 [{value:"", value:"", unit:""}]
* @returns {title:数据标题, dataList:[{name:"", value:"", key1:"", key2:""}] }
*/
export function getObjectListOut(title, data) {
//todo 没有特殊逻辑
return {title, dataList:data};
}
/**
* getRankOut 获取排名结果
* @param title 数据标题
* @param data 数据体 {unit, max, dataInfo:[{key, value, details}, {}, {}, {}] }
* @returns {title:数据标题, max, unit dataList:[{name, value, unit, rankNumber}] }
*/
export function getRankOut(title, data) {
let {unit, max, dataInfo} = data;
let dataList = [];
dataInfo.forEach((info, index) => {
let {key, value} = info;
let rankNumber = index + 1;
dataList.push({name:key, value, details:info.details, rankNumber});
});
return { title, unit, max, dataList };
}
/**
* getRadarChartOut 获取雷达图
* @param title 数据标题
* @param data 数据体 [{key, value, max, unit}]
* @returns {title:数据标题, dataList:[{name:"指标名称", max:"最大值", value:"当前值", unit:"单位"}]}
*/
export function getRadarChartOut(title, data) {
let dataList = [];
data.forEach(info => {
dataList.push({
name:info.key,
value:info.value,
max:info.max,
unit:info.unit
});
});
return {title, dataList};
}
/**
* getMapOut 地图数据
* @param title 数据标题
* @param data 数据体 [{name:数据名称, x:x坐标, y:坐标, coordinate:[经度, 纬度], unit:单位, value:值, details:"补充"}]
* @returns {title:数据标题, dataList:[{name:数据名称, x:x坐标, y:坐标, coordinate:[经度, 纬度], unit:单位, value:值, details:"补充"} ] }
*/
export function getMapOut(title, data) {
//todo 无特殊逻辑
return {title, dataList:data};
}
/**
* getScatterFigureOutData 获取撒点图的返回结果
* @param title 标题
* @param data 数据 格式 [{x, y, name}, {x, y, name}, {x, y, name}, {x, y, name}]
* @returns { title:标题, xMax:x轴最大值, xMin:x最小值, yMax:y最大值, yMin:y最小值, dataList:[{name:点的名称, value:[x坐标, y坐标]} ] };
*/
export function getScatterFigureOutData(title, data) {
let dataList = [];
let xMaxNumber = 0;
let xMinNumber = new Date().valueOf();
let yMaxNumber = 0;
let yMinNumber = new Date().valueOf();
data.forEach(item => {
let { x, y, name } = item;
let xCoordinateInfo = separateDataAndUint(x);
let yCoordinateInfo = separateDataAndUint(y);
const XNumber = xCoordinateInfo.dataNum;
const YNumber = yCoordinateInfo.dataNum;
yMaxNumber = Math.max(YNumber, yMaxNumber);
yMinNumber = Math.min(YNumber, yMinNumber);
xMaxNumber = Math.max(XNumber, xMaxNumber);
xMinNumber = Math.min(XNumber, xMinNumber);
let value = [XNumber, YNumber];
dataList.push({ value, name:name || "" });
});
let xMaxMinInfo = unifiedMaxAndMinValueAndStep(xMaxNumber, xMinNumber);
let yMaxMinInfo = unifiedMaxAndMinValueAndStep(yMaxNumber, yMinNumber);
return { title, xMax:xMaxMinInfo.maxNumber, xMin:xMaxMinInfo.minNumber, yMax:yMaxMinInfo.maxNumber, yMin:yMaxMinInfo.minNumber, dataList };
}
import { BizError } from "../util/bizError";
import pyfl from 'pyfl';
//disintegrate 分解二维数据源数据
/**
* planarArrForObjectList 解析二维数组
* @param planarArr 二维数组 例子:[[title1, title2, title3, title4],[value1, value2, value3, value4],[value5, value6, value7, value8]]
* @param titleIndex 标题集合所在第一层数组的下标
* @param titleList 自定义标题列表 不传则会取每个title的中文首字母作为key
* @returns {"dataList":[{title1:value1, title2:value2, title3:value3, title4:value4}, {title1:value5, title2:value6, title3:value7, title4:value8}], titleList:[]}
*/
export function planarArrForObjectList(planarArr, titleIndex = 0, titleList = []) {
let dataTitleList = [];
let dataMaxLength = 0;
for (let i = titleIndex; i< planarArr.length; i++) {
let subList = planarArr[i];
if (i == titleIndex) {
dataTitleList = subList;
continue;
}
dataMaxLength = Math.max(subList.length, dataMaxLength);
}
let useTitleList = !titleList.length ? changeChineseTitleIntoEnglish(dataTitleList) : titleList;
if (dataMaxLength == 2 && !titleList.length) useTitleList = ["key", "value"];
if (dataTitleList.length < dataMaxLength ) throw new BizError(`解析时数据异常 数据长度:${dataMaxLength} 大于 标题长度${dataTitleList}`);
if (titleList.length && titleList.length < dataMaxLength) throw new BizError(`解析时数据异常 传入标题长度${titleList.length} 数据最大长度${dataMaxLength}`);
let dataList = [];
for (let i = (titleIndex + 1); i< planarArr.length; i++) {
let subList = planarArr[i];
let addInfo:any = {};
subList.forEach((item, index) => {
let key = useTitleList[index];
let value = item;
addInfo[key] = value;
});
dataList.push(addInfo);
}
return {dataList, titleList:useTitleList };
}
function changeChineseTitleIntoEnglish(titles) {
let result = [];
titles.forEach(chineseStr => {
result.push(pyfl(chineseStr).toLowerCase());
});
return result;
}
/**
* planarArrDeconstruct 解构二维数组
* 第一列是名称
* @param planarArr 二维数组 例:[[name, 1月, 2月, 3月],[数据1, 1月数据, 2月数据,3月数据 ],[数据2, 1月数据, 2月数据,3月数据]]
* @param titleIndex 标题集合所在第一层数组的下标
* @returns [{"name":"", data:[{key:"1月", value:"1月数据"}, {key:"2月", value:"2月数据"} ]}];
*/
export function planarArrDeconstruct(planarArr, titleIndex = 0) {
let dataInfo = []
let titleList = [];
for (let i = titleIndex; i < planarArr.length; i++) {
let subList = planarArr[i];
if (titleIndex == i){
titleList = subList;
} else {
let thisDataName = "";
let thisDataList = [];
subList.forEach((item, index) => {
if (!index) {
thisDataName = item;
return;
}
let key = titleList[index];
thisDataList.push({key, value:item});
});
dataInfo.push({name:thisDataName, data:thisDataList});
}
}
return dataInfo;
}
/**
* planarArrDecollateForIndex 拆解二维数组
* @param planarArr 二维数组
* @param decollateIndex 拆解开始的下标
* @returns {headerList:decollateIndex下标之前的集合(包括decollateIndex), bodyList:decollateIndex下标之后的集合(不包括decollateIndex)}
*/
export function planarArrDecollateForIndex(planarArr, decollateIndex = 0) {
let headerList = planarArr.slice(decollateIndex, decollateIndex + 1);
let bodyList = planarArr.slice(decollateIndex + 1, planarArr.length);
return {headerList, bodyList};
}
//excel 和 接口都可以使用的格式化数据的方法
/**
* objBecomeOfList 对象变成数组 value不限制类型
* @param obj 对象 {"key1":"value1", "key2":"value2"}
* @param keyName 指定key的名称 默认 name
* @param valueName 指定value的名称 默认 data
* @returns [{name:"key1", "data":"value1"}, ...]
*/
export function objBecomeOfList(obj, keyName="name", valueName="data") {
let result = [];
for (let key in obj) {
let once:any = {};
once[keyName] = key;
once[valueName] = obj[key];
result.push(once);
}
return result;
}
/**
* objChangeKey obj改变key
* @param obj {"key1":"value1", "key2":"value2"}
* @param checkKeyInfo {"key1":"eKey1", "key2":"eKey2"}
* @returns
*/
export function objChangeKey(obj, checkKeyInfo) {
let result = {};
for (let key in obj) {
let newKey = checkKeyInfo[key] || key;
result[newKey] = obj[key];
}
return result;
}
/**
* objListChangeKey objList 改变key
* @param objList
* @param checkKeyInfo
* @returns
*/
export function objListChangeKey(objList, checkKeyInfo) {
return
}
\ No newline at end of file
/**
* separateDataAndUint 截取字符串中的单位
* @param str 待处理字符串
* @returns {dataNumber:数据, dataUnit:单位}
*/
export function separateDataAndUint(str) {
str = `${str}`;
if (!str) return {dataNum:0, dataUnit:""};
let dataNum = parseFloat(str.replace(/[\u4E00-\u9FA5a-zA-Z]+/,""));
let dataUnit = str.replace(/^(-)?\d+(\.\d+)?/, "");
return {dataNum, dataUnit};
}
/**
* unifiedMaxAndMinValueAndStep 求最大最小值以及间隙
* @param max 最大
* @param min 最小
* @param count 分多少份 默认5
* @returns {maxNumber:向上留值最大, minNumber:向下留值最小, stepNumber:间隔};
*/
export function unifiedMaxAndMinValueAndStep(max, min, count=5) {
let maxNumber = Math.ceil(max);
let minNumber = Math.floor(min);
function getNumberInLength(length) {
let lengthCount = 1;
for (let i = 1; i < length; i++) {
lengthCount = lengthCount * 10;
}
return lengthCount;
}
let maxNumberLength = getNumberInLength(`${maxNumber}`.length);
let minNumberLength = getNumberInLength(`${minNumber}`.length);
if (maxNumber <= 10 && maxNumber > 0) maxNumber = 10;
else maxNumber = Math.ceil(maxNumber / maxNumberLength) * maxNumberLength;
minNumber = Math.floor(minNumber / minNumberLength) * minNumberLength;
let stepNumber = Math.ceil((maxNumber - minNumber) / count);
return {maxNumber, minNumber, stepNumber};
}
import { initActivityQueue } from "./data/interface/activeQueueData";
import { initBaiDuToken } from "./data/interface/baiduStats";
import { getAccessToken, getRefreshToken } from "./data/interface/baiduyun";
import { initInterfaceData, post } from "./data/interface/cronJob"; import { initInterfaceData, post } from "./data/interface/cronJob";
import { initQueueData } from "./data/interface/queueData"; import { initQueueData } from "./data/interface/queueData";
import * as healthInformation from "./data/interface/secondPhase/healthInformation"; import * as healthInformation from "./data/interface/secondPhase/healthInformation";
...@@ -7,18 +10,20 @@ import { getPort } from "./serverConfig"; ...@@ -7,18 +10,20 @@ import { getPort } from "./serverConfig";
async function lanuch() { async function lanuch() {
// await initBaiDuToken();
let initResult = await initQueueData(); let initResult = await initQueueData();
if (!initResult) { if (!initResult) {
console.log("请求阿里云数据失败,请检查网络 重新启动"); console.log("请求阿里云数据失败,请检查网络 重新启动");
return; return;
} }
initUser(); initUser();
// initActivityQueue();
// test(); // test();
httpServer.createServer(getPort()); httpServer.createServer(getPort());
} }
function test() { async function test() {
// healthInformation.getStuData(); // healthInformation.getStuData();
// getDayStuData(); // getDayStuData();
// getMonthStuData(); // getMonthStuData();
...@@ -34,6 +39,8 @@ function test() { ...@@ -34,6 +39,8 @@ function test() {
// getNotice(); // getNotice();
// getHealthRate(); // getHealthRate();
// getHistoricalHealthData(); // getHistoricalHealthData();
// await getAccessToken();
// await getRefreshToken();
} }
lanuch(); lanuch();
......
...@@ -8,7 +8,7 @@ export function httpErrorHandler(err, req, res, next) { ...@@ -8,7 +8,7 @@ export function httpErrorHandler(err, req, res, next) {
next(); next();
} }
else if (err.message == "您的账户没有访问权限") { else if (err.message == "您的账户没有访问权限") {
res.success({success:false, msg:"非常抱歉,您没有权限,请联系工作人员!", code:502}); res.success({success:false, msg:"您可能遇到了一些登录问题。不用担心,请联系我们的工作人员,他们会乐意为您提供帮助。", code:502});
next(); next();
} else if ( err.message == "token已过期") { } else if ( err.message == "token已过期") {
res.success({success:false, msg:"token失效", code:503}); res.success({success:false, msg:"token失效", code:503});
......
...@@ -3,6 +3,7 @@ import * as sjzltxBiz from '../biz/sjzltx'; ...@@ -3,6 +3,7 @@ import * as sjzltxBiz from '../biz/sjzltx';
import * as ztyxtsBiz from '../biz/ztyxts'; import * as ztyxtsBiz from '../biz/ztyxts';
import * as zyhdbzBiz from '../biz/zyhdbz'; import * as zyhdbzBiz from '../biz/zyhdbz';
import * as userBiz from '../biz/user'; import * as userBiz from '../biz/user';
import * as weeklyPlayBiz from '../biz/zzb/weeklyPlay';
import { adminPermission, checkToken, pagePermission } from '../middleware/sign'; import { adminPermission, checkToken, pagePermission } from '../middleware/sign';
//二期 //二期
...@@ -11,39 +12,86 @@ import * as workstationBiz from '../biz/secondPhase/workstation'; ...@@ -11,39 +12,86 @@ import * as workstationBiz from '../biz/secondPhase/workstation';
import * as workstationPopupBiz from '../biz/secondPhase/workstationPopup'; import * as workstationPopupBiz from '../biz/secondPhase/workstationPopup';
export function setRouter(httpServer){ export function setRouter(httpServer){
httpServer.get('/interface/sjzltx', asyncHandler(sjzltxBiz.getData)); // httpServer.get('/interface/sjzltx', asyncHandler(sjzltxBiz.getData));
httpServer.post('/interface/sjzltx', asyncHandler(sjzltxBiz.getData)); // httpServer.post('/interface/sjzltx', asyncHandler(sjzltxBiz.getData));
httpServer.get('/interface/ztyxts', asyncHandler(ztyxtsBiz.getData)); // httpServer.get('/interface/ztyxts', asyncHandler(ztyxtsBiz.getData));
httpServer.post('/interface/ztyxts', asyncHandler(ztyxtsBiz.getData)); // httpServer.post('/interface/ztyxts', asyncHandler(ztyxtsBiz.getData));
httpServer.get('/interface/zyhdbz', asyncHandler(zyhdbzBiz.getData)); // httpServer.get('/interface/zyhdbz', asyncHandler(zyhdbzBiz.getData));
httpServer.post('/interface/zyhdbz', asyncHandler(zyhdbzBiz.getData)); // httpServer.post('/interface/zyhdbz', asyncHandler(zyhdbzBiz.getData));
httpServer.get('/interface/zyhdbzpop', asyncHandler(zyhdbzBiz.getPopData)); // httpServer.get('/interface/zyhdbzpop', asyncHandler(zyhdbzBiz.getPopData));
httpServer.post('/interface/zyhdbzpop', asyncHandler(zyhdbzBiz.getPopData)); // httpServer.post('/interface/zyhdbzpop', asyncHandler(zyhdbzBiz.getPopData));
// // //分配权限
// httpServer.post('/interface/permission/getlist', checkToken, adminPermission, asyncHandler(userBiz.permissionList));
// httpServer.post('/interface/permission/updatepermission',checkToken, adminPermission, asyncHandler(userBiz.updatePermissions));
// //==二级页面
// httpServer.post('/interface/gettoken', asyncHandler(userBiz.getUserToken));
// httpServer.post('/interface/permission/checkpage', checkToken, pagePermission, asyncHandler(userBiz.checkPermissionForPage) );
// httpServer.post('/interface/permission/checkadmin', checkToken, pagePermission, asyncHandler(userBiz.checkPermissionForAdmin) );
// httpServer.post('/interface/permission/checkhomepage', checkToken, asyncHandler(userBiz.checkPermissionForHomePage) );
// //二期
// httpServer.get('/interface/secondPhase/gradehealth', checkToken, asyncHandler(healthBiz.getData));
// httpServer.get('/interface/secondPhase/workstation', checkToken, asyncHandler(workstationBiz.getData));
// httpServer.get('/interface/secondPhase/workstation/popup', asyncHandler(workstationPopupBiz.getData));
// httpServer.post('/interface/secondPhase/gradehealth', checkToken, asyncHandler(healthBiz.getData));
// httpServer.post('/interface/secondPhase/workstation', checkToken, asyncHandler(workstationBiz.getData));
// httpServer.post('/interface/secondPhase/workstation/popup', asyncHandler(workstationPopupBiz.getData));
// httpServer.get('/test/secondPhase/workstation', asyncHandler(workstationBiz.getTest));
// httpServer.post('/test/secondPhase/workstation', asyncHandler(workstationBiz.getTest));
httpServer.get('/sjzltx', asyncHandler(sjzltxBiz.getData));
httpServer.post('/sjzltx', asyncHandler(sjzltxBiz.getData));
httpServer.get('/ztyxts', asyncHandler(ztyxtsBiz.getData));
httpServer.post('/ztyxts', asyncHandler(ztyxtsBiz.getData));
httpServer.get('/zyhdbz', asyncHandler(zyhdbzBiz.getData));
httpServer.post('/zyhdbz', asyncHandler(zyhdbzBiz.getData));
httpServer.get('/zyhdbzpop', asyncHandler(zyhdbzBiz.getPopData));
httpServer.post('/zyhdbzpop', asyncHandler(zyhdbzBiz.getPopData));
// //分配权限 // //分配权限
httpServer.post('/interface/permission/getlist', checkToken, adminPermission, asyncHandler(userBiz.permissionList)); httpServer.post('/interface/permission/getlist', checkToken, adminPermission, asyncHandler(userBiz.permissionList));
httpServer.post('/interface/permission/updatepermission',checkToken, adminPermission, asyncHandler(userBiz.updatePermissions)); httpServer.post('/interface/permission/updatepermission',checkToken, adminPermission, asyncHandler(userBiz.updatePermissions));
//==二级页面 //==二级页面
httpServer.post('/interface/gettoken', asyncHandler(userBiz.getUserToken)); httpServer.post('/gettoken', asyncHandler(userBiz.getUserToken));
httpServer.post('/interface/permission/checkpage', checkToken, pagePermission, asyncHandler(userBiz.checkPermissionForPage) ); httpServer.post('/permission/checkpage', pagePermission, asyncHandler(userBiz.checkPermissionForPage) );
httpServer.post('/interface/permission/checkadmin', checkToken, pagePermission, asyncHandler(userBiz.checkPermissionForAdmin) ); httpServer.post('/permission/checkadmin', pagePermission, asyncHandler(userBiz.checkPermissionForAdmin) );
httpServer.post('/interface/permission/checkhomepage', checkToken, asyncHandler(userBiz.checkPermissionForHomePage) ); httpServer.post('/permission/checkhomepage', asyncHandler(userBiz.checkPermissionForHomePage) );
//二期 //二期
httpServer.get('/interface/secondPhase/gradehealth', checkToken, asyncHandler(healthBiz.getData)); httpServer.get('/secondPhase/gradehealth', asyncHandler(healthBiz.getData));
httpServer.get('/interface/secondPhase/workstation', checkToken, asyncHandler(workstationBiz.getData)); httpServer.get('/secondPhase/workstation', asyncHandler(workstationBiz.getData));
httpServer.get('/interface/secondPhase/workstation/popup', asyncHandler(workstationPopupBiz.getData)); httpServer.get('/secondPhase/workstation/popup', asyncHandler(workstationPopupBiz.getData));
httpServer.post('/interface/secondPhase/gradehealth', checkToken, asyncHandler(healthBiz.getData));
httpServer.post('/interface/secondPhase/workstation', checkToken, asyncHandler(workstationBiz.getData));
httpServer.post('/interface/secondPhase/workstation/popup', asyncHandler(workstationPopupBiz.getData));
httpServer.post('/secondPhase/gradehealth', asyncHandler(healthBiz.getData));
httpServer.post('/secondPhase/workstation', asyncHandler(workstationBiz.getData));
httpServer.post('/secondPhase/workstation/popup', asyncHandler(workstationPopupBiz.getData));
httpServer.get('/test/secondPhase/workstation', asyncHandler(workstationBiz.getTest)); httpServer.get('/test/secondPhase/workstation', asyncHandler(workstationBiz.getTest));
httpServer.post('/test/secondPhase/workstation', asyncHandler(workstationBiz.getTest)); httpServer.post('/test/secondPhase/workstation', asyncHandler(workstationBiz.getTest));
//三期
httpServer.get('/weeklyplay', asyncHandler(weeklyPlayBiz.getData));
httpServer.post('/weeklyplay', asyncHandler(weeklyPlayBiz.getData));
httpServer.get('/curriculumpop', asyncHandler(weeklyPlayBiz.curriculumPop));
httpServer.post('/curriculumpop', asyncHandler(weeklyPlayBiz.curriculumPop));
httpServer.get('/dropdown', asyncHandler(weeklyPlayBiz.dropDown));
httpServer.post('/dropdown', asyncHandler(weeklyPlayBiz.dropDown));
} }
\ No newline at end of file
...@@ -10,7 +10,7 @@ export function getEnv() : string { ...@@ -10,7 +10,7 @@ export function getEnv() : string {
} }
export let requestConfig = { export let requestConfig = {
url:'http://61.171.4.98:9090', url:'http://127.0.0.1:40301',
client_id:'75cb2a016ec640a886f681b2d3ae6f3c', client_id:'75cb2a016ec640a886f681b2d3ae6f3c',
client_secret:'df795bea090e441fba6361645d18d5de' client_secret:'df795bea090e441fba6361645d18d5de'
}; };
...@@ -27,7 +27,8 @@ export const uacInfomation = { ...@@ -27,7 +27,8 @@ export const uacInfomation = {
export let healthConfig = { export let healthConfig = {
url:'http://172.22.235.5:28080/dataengine-center-oneservice/list/', // url:'http://172.22.235.5:28080/dataengine-center-oneservice/list/',
url:'http://127.0.0.1:40301/dataengine-center-oneservice/list/',
appKey:"200000085", appKey:"200000085",
// account:"man_001", //yujc // account:"man_001", //yujc
// execType:3, // execType:3,
...@@ -36,7 +37,8 @@ export let healthConfig = { ...@@ -36,7 +37,8 @@ export let healthConfig = {
} }
export let workstationConfig = { export let workstationConfig = {
url:'http://172.22.235.5:28080/dataengine-center-oneservice/list/', // url:'http://172.22.235.5:28080/dataengine-center-oneservice/list/',
url:'http://127.0.0.1:40301/dataengine-center-oneservice/list/',
appKey:"200000086", appKey:"200000086",
// account:"man_001", //yujc // account:"man_001", //yujc
// execType:3, // execType:3,
......
//新的解析
const fs = require('fs');
const xlsx = require('node-xlsx'); const xlsx = require('node-xlsx');
const path = require('path'); const path = require('path');
const moment = require('moment');
/** /**
* getExcelDataBySheetName 将excel文件解析成数据块数据 * onceSheetBecomeOfblockData 将excel文件的指定sheet解析成数据块数据
* @param fileName 文件名称 * @param fileName 文件名称
* @param sheetName 表名称 * @param sheetName 表名称
* @returns thisBlockData 返回数据块集合 格式:blockList = [ {blockData:数据块(二维数组), blockTitle:"数据标题"}] * @returns [ {blockData:数据块(二维数组), blockTitle:"数据标题"}]
*/
export function onceSheetBecomeOfblockData(fileName, sheetName) {
let {sheetMap} = getExcel( path.join(__dirname.substring(0,__dirname.indexOf("out")), "res", fileName ));
let thisBlockData = getBlockData(sheetMap[sheetName]);
return thisBlockData;
}
/**
* excelBecomeOfBlockData 将excel所有的sheet解析成数据块
* @param fileName 文件名称
* @returns {"sheetName1":[ {blockData:数据块(二维数组), blockTitle:"数据标题"}], ...}
*/ */
export function excelBecomeOfBlockData(fileName) {
let {sheetMap} = getExcel( path.join(__dirname.substring(0,__dirname.indexOf("out")), "res", fileName ));
let result = {};
for (let sheetName in sheetMap) {
result[sheetName] = getBlockData(sheetMap[sheetName]);
}
return result;
}
export function getExcelDataBySheetName(fileName, sheetName) {
let {sheetMap, sheetList} = getExcel( path.join(__dirname.substring(0,__dirname.indexOf("out")), "res", fileName )); /**
* 将指定文件夹里的excel文件的指定sheet解析成数据块数据
* @param fileName
* @param sheetName
* @param url
* @returns
*/
export function onceSheetBecomeOfblockDataToUrl(fileName, sheetName, url) {
let {sheetMap} = getExcel( path.join(__dirname.substring(0,__dirname.indexOf("out")), `res${url}`, fileName ));
let thisBlockData = getBlockData(sheetMap[sheetName]); let thisBlockData = getBlockData(sheetMap[sheetName]);
return thisBlockData; return thisBlockData;
} }
/** /**
* getBlockDataByData 将excel解析出来的二维数组解析成数据块模式 * planaryArrayBecomeOfBlockData 将符合excel规则的sheet二维数组转为 数据块
* @param dataList excel解出来的数据 * @param dataList excel解出来的数据
* @returns thisBlockData 返回数据块集合 格式:blockList = [ {blockData:数据块(二维数组), blockTitle:"数据标题"}] * @returns thisBlockData 返回数据块集合 格式:blockList = [ {blockData:数据块(二维数组), blockTitle:"数据标题"}]
*/ */
export function getBlockDataByData(dataList) { export function planaryArrayBecomeOfBlockData(planaryArray) {
let thisBlockData = getBlockData(dataList); return getBlockData(planaryArray);;
return thisBlockData;
} }
//===
/** /**
* getBlockData 数据分块 * getBlockData 数据分块
* @param dataList 解析出来的excel二维数组 * @param dataList 解析出来的excel二维数组
...@@ -177,6 +204,8 @@ function checkBlock(dataList) { ...@@ -177,6 +204,8 @@ function checkBlock(dataList) {
return {blockData, blockTitle, delDataList:dataList,notItem}; return {blockData, blockTitle, delDataList:dataList,notItem};
} }
//获取单个excel文件的数据 //获取单个excel文件的数据
function getExcel(filePath) { function getExcel(filePath) {
const workSheetsFromFile = xlsx.parse(filePath); const workSheetsFromFile = xlsx.parse(filePath);
......
var xml2js = require("xml2js");
/**
*
* @param str 需要解析的xml文本
* @returns 解析好的对象
*/
export function analysisXml(str) {
return new Promise( (resolve, reject) => {
xml2js.parseString(str, (err, result) => {
if (err) return reject(err);
return resolve(result);
});
});
}
\ 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