Commit 51428c7e by lixinming

no message

parents
.idea
.vscode
/out
/node_modules
/test
*test*
*.log
\ No newline at end of file
{
"name": "gameserver",
"version": "1.0.0",
"description": "",
"main": "main.ts",
"dependencies": {
"@alicloud/sms-sdk": "^1.1.6",
"compression": "^1.7.4",
"express": "^4.17.1",
"express-async-handler": "^1.1.4",
"express-history-api-fallback": "^2.2.1",
"formidable": "^1.2.1",
"log4js": "^6.9.1",
"lru-cache": "^4.1.5",
"md5": "^2.2.1",
"moment": "^2.24.0",
"mongoose": "^6.2.3",
"node-xlsx": "^0.16.1",
"nodemailer": "^6.1.1",
"pyfl": "^1.1.4",
"request": "^2.88.0",
"svg-captcha": "^1.3.12",
"xml2js": "^0.4.23"
},
"devDependencies": {
"@types/node": "^10.17.60"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
<config>
<port>50001</port>
<imgPath>http://192.168.0.189:50001</imgPath>
</config>
\ No newline at end of file
import { systemConfig } from '../config/serverConfig';
import { jyyzzyTableData, kcsjTableData } from '../data/table/jyyzzyData';
import { doubleYBarCharPackage, keyValuePackage, onceYBarChartPackage, rankPackage, stringListPackage, tablePackage } from '../dataPackage/inFrontOut';
import { getDoubleYBarChartOut, getKeyValueOut, getOnceYBarChartOut, getStringOut, getTableOut } from '../dataPackage/out';
import { BizError } from '../util/bizError';
/* 教育优质资源 */
export function getData(req, res) {
let excelData = jyyzzyTableData();
let ret:any = {};
let rkzyysPackageData = onceYBarChartPackage( excelData['入库资源优势'], '','年');
ret['rkzyys'] = getOnceYBarChartOut('入库资源优势', rkzyysPackageData);
let sbdwjgPackageData = keyValuePackage(excelData['申报单位结构'].dataList);
ret['sbdwjg'] = getKeyValueOut('申报单位结构', sbdwjgPackageData);
let kclyjgPackageData = keyValuePackage(excelData['课程来源情况'].dataList);
ret['kclyjg'] = getKeyValueOut('课程来源情况', kclyjgPackageData);
let kcpszlbkPackageData = tablePackage(excelData["课程评审质量把控"].headerList[0], excelData["课程评审质量把控"].bodyList);
ret['kcpszlbk'] = getTableOut( '课程评审质量把控基础数据', kcpszlbkPackageData);
let eskcpszlbkPackageData = keyValuePackage(excelData['二审课程分类'].dataList);
ret['eskcpszlbk'] = getKeyValueOut('二审课程分类', eskcpszlbkPackageData);
let sskcpszlbkPackageData = keyValuePackage(excelData['三审课程分类'].dataList);
ret['sskcpszlbk'] = getKeyValueOut('三审课程分类', sskcpszlbkPackageData);
let yskcpszlbkPackageData = keyValuePackage(excelData['一审课程分类'].dataList);
ret['yskcpszlbk'] = getKeyValueOut('一审课程分类', yskcpszlbkPackageData);
let eskclyPackageData = keyValuePackage(excelData['二审课程领域'].dataList);
ret['eskcly'] = getKeyValueOut('二审课程领域', eskclyPackageData);
let sskclyPackageData = keyValuePackage(excelData['三审课程领域'].dataList);
ret['sskcly'] = getKeyValueOut('三审课程领域', sskclyPackageData);
let yskclyPackageData = keyValuePackage(excelData['一审课程领域'].dataList);
ret['yskcly'] = getKeyValueOut('一审课程领域', yskclyPackageData);
let kclbPackageData = keyValuePackage(excelData['课程类别'].dataList);
ret['kclb'] = getKeyValueOut('课程类别', kclbPackageData);
let rkzyyssjPackageData = keyValuePackage(excelData['入库资源优势数据'].dataList);
ret['rkzyyssj'] = getKeyValueOut('入库资源优势数据', rkzyyssjPackageData);
let yzzyhzPackageData = keyValuePackage(excelData['优质资源汇总'].dataList);
ret['yzzyhz'] = getKeyValueOut('优质资源汇总', yzzyhzPackageData);
let yzkctopbPackageData = keyValuePackage(excelData['优质课程TOP榜'].dataList);
let yzkctopb = [];
yzkctopbPackageData.forEach( info => {
let {key, value, unit} = info;
yzkctopb.push({key, value:`${systemConfig.imgPath}/${value}`, unit});
})
ret['yzkctopb'] = getKeyValueOut('优质课程TOP榜', yzkctopb);
let zxppzyPackageData = keyValuePackage(excelData['专项品牌资源'].dataList);
let zxppzy = [];
zxppzyPackageData.forEach( info => {
let {key, value, unit} = info;
zxppzy.push({key, value:`${systemConfig.imgPath}/${value}`, unit});
})
ret['zxppzy'] = getKeyValueOut('专项品牌资源', zxppzy);
let lsdwPackageData = stringListPackage(excelData['理事单位'].dataList);
ret['lsdw'] = getStringOut('理事单位', lsdwPackageData);
let kcsscgPackageData = keyValuePackage(excelData['课程实施成果'].dataList);
ret['kcsscg'] = getKeyValueOut('课程实施成果', kcsscgPackageData);
res.send(ret);
}
/**
* 课程数据 右屏
* @param req kcsjType:"在线公益课程" , "进校服务课程", "校外行走课程"
* @param res
*/
export function getKcsj(req, res) {
let ret:any = {};
let kcsjType = req.body.kcsjType;
if(!kcsjType) throw new BizError('kcsjType不能为空');
let excelData = kcsjTableData(kcsjType);
let zxgykcPackageData = keyValuePackage(excelData['课程基础数据'].dataList);
ret['zxgykc'] = getKeyValueOut('课程基础数据', zxgykcPackageData);
let kclxsjPackageData = keyValuePackage(excelData['课程类型数据'].dataList);
ret['kclxsj'] = getKeyValueOut('课程类型数据', kclxsjPackageData);
let kclxPackageData = keyValuePackage(excelData['课程类型饼图'].dataList);
ret['kclx'] = getKeyValueOut('课程类型饼图', kclxPackageData);
let kcgkqsPackageData = onceYBarChartPackage( excelData['课程观看趋势'], '','');
ret['kcgkqs'] = getOnceYBarChartOut('课程观看趋势', kcgkqsPackageData);
let gxdgkfxPackageData = onceYBarChartPackage( excelData['各学段观看分析'], '','');
ret['gxdgkfx'] = getOnceYBarChartOut('各学段观看分析', gxdgkfxPackageData);
let kcpjfkPackageData = keyValuePackage(excelData['课程评价/反馈'].dataList);
ret['kcpjfk'] = getKeyValueOut('课程评价/反馈', kcpjfkPackageData);
let kcpjdjPackageData = keyValuePackage(excelData['课程评价等级'].dataList);
ret['kcpjdj'] = getKeyValueOut('课程评价等级', kcpjdjPackageData);
// let kcsjConf = ["在线公益课程" , "进校服务课程", "校外行走课程"];
// for(let i=0; i<kcsjConf.length; i++){
// }
res.send(ret);
}
\ No newline at end of file
import { kxyjyTableData } from '../data/table/kxyjyData';
import { doubleYBarCharPackage, keyValuePackage, onceYBarChartPackage, rankPackage, tablePackage } from '../dataPackage/inFrontOut';
import { getDoubleYBarChartOut, getKeyValueOut, getOnceYBarChartOut, getTableOut } from '../dataPackage/out';
/* 科学研究院 */
export function getData(req, res) {
let excelData = kxyjyTableData();
let ret:any = {};
let gqzsqkPackageData = onceYBarChartPackage( excelData['各区招收情况'], '','');
ret['gqzsqk'] = getOnceYBarChartOut('各区招收情况', gqzsqkPackageData);
let xsqyfbPackageData = onceYBarChartPackage( excelData['学生区域分布'], '','');
ret['xsqyfb'] = getOnceYBarChartOut('学生区域分布', xsqyfbPackageData);
let gqxskqfxqsPackageData = onceYBarChartPackage( excelData['各区学生考勤分析趋势'], '','');
ret['gqxskqfxqs'] = getOnceYBarChartOut('各区学生考勤分析趋势', gqxskqfxqsPackageData);
let gqxsktslPackageData = onceYBarChartPackage( excelData['各区学生课题数量'], '','');
ret['gqxsktsl'] = getOnceYBarChartOut('各区学生课题数量', gqxsktslPackageData);
let gzpyPackageData = onceYBarChartPackage( excelData['跟踪培育'], '','');
ret['gzpy'] = getOnceYBarChartOut('跟踪培育', gzpyPackageData);
let hcjhdPackageData = onceYBarChartPackage( excelData['活参加活动'], '','');
ret['hcjhd'] = getOnceYBarChartOut('活参加活动', hcjhdPackageData);
let xdfbPackageData = keyValuePackage(excelData['学段分布'].dataList);
ret['xdfb'] = getKeyValueOut('学段分布', xdfbPackageData);
let pymsPackageData = keyValuePackage(excelData['培养模式'].dataList);
ret['pyms'] = getKeyValueOut('培养模式', pymsPackageData);
let ktlxfbPackageData = keyValuePackage(excelData['课题类型分布'].dataList);
ret['ktlxfb'] = getKeyValueOut('课题类型分布', ktlxfbPackageData);
let sbrsPackageData = keyValuePackage(excelData['申报人数'].dataList);
ret['sbrs'] = getKeyValueOut('申报人数', sbrsPackageData);
let mszyPackageData = keyValuePackage(excelData['名师资源'].dataList);
ret['mszy'] = getKeyValueOut('名师资源', mszyPackageData);
let gqxskqfxPackageData = keyValuePackage(excelData['各区学生考勤分析'].dataList);
ret['gqxskqfx'] = getKeyValueOut('各区学生考勤分析', gqxskqfxPackageData);
let ktyjPackageData = keyValuePackage(excelData['课题研究'].dataList);
ret['ktyj'] = getKeyValueOut('课题研究', ktyjPackageData);
let yjcgPackageData = keyValuePackage(excelData['研究成果'].dataList);
ret['yjcg'] = getKeyValueOut('研究成果', yjcgPackageData);
let dbPackageData = keyValuePackage(excelData['顶部'].dataList);
ret['db'] = getKeyValueOut('顶部', dbPackageData);
let yxxsfclTableData = tablePackage(excelData["优秀学生风采录"].headerList[0], excelData["优秀学生风采录"].bodyList);
ret['yxxsfcl'] = getTableOut( '优秀学生风采录', yxxsfclTableData);
let ktyjtpTableData = tablePackage(excelData["课题研究图片"].headerList[0], excelData["课题研究图片"].bodyList);
ret['ktyjtp'] = getTableOut( '课题研究图片', ktyjtpTableData);
let xsxbfbPackageData = keyValuePackage(excelData['学生性别分布'].dataList);
ret['xsxbfb'] = getKeyValueOut('学生性别分布', xsxbfbPackageData);
res.send(ret);
}
\ No newline at end of file
import { gzzTableData } from '../data/table/gzzData';
import { qsnkjcxsjgzzTableData } from '../data/table/qsnkjcxsjgzzData';
import { doubleYBarCharPackage, keyValuePackage, onceYBarChartPackage, rankPackage, tablePackage } from '../dataPackage/inFrontOut';
import { getDoubleYBarChartOut, getKeyValueOut, getOnceYBarChartOut, getTableOut } from '../dataPackage/out';
/* 青少年科技创新实践工作站 */
export function getData(req, res) {
let excelData = gzzTableData();
let ret:any = {};
let lnzmxyqkPackageData = onceYBarChartPackage( excelData['历年招募学员情况'], '','年');
ret['lnzmxyqk'] = getOnceYBarChartOut('历年招募学员情况', lnzmxyqkPackageData);
let xslyfbPackageData = onceYBarChartPackage( excelData['学生来源分布'], '','年');
ret['xslyfb'] = getOnceYBarChartOut('学生来源分布', xslyfbPackageData);
let kclnzysPackageData = onceYBarChartPackage( excelData['课程历年资源数'], '','年');
ret['kclnzys'] = getOnceYBarChartOut('课程历年资源数', kclnzysPackageData);
let pxlnzysPackageData = onceYBarChartPackage( excelData['培训历年资源数'], '','年');
ret['pxlnzys'] = getOnceYBarChartOut('培训历年资源数', pxlnzysPackageData);
let ggzzxsslfxPackageData = onceYBarChartPackage( excelData['各工作站学生数量分析'], '','');
ret['ggzzxsslfx'] = getOnceYBarChartOut('各工作站学生数量分析', ggzzxsslfxPackageData);
let rcglqsPackageData = onceYBarChartPackage( excelData['日常管理趋势'], '','年');
ret['rcglqs'] = getOnceYBarChartOut('日常管理趋势', rcglqsPackageData);
let zypplfxPackageData = onceYBarChartPackage( excelData['专业匹配率分析'], '','');
ret['zypplfx'] = getOnceYBarChartOut('专业匹配率分析', zypplfxPackageData);
let xklsfbPackageData = keyValuePackage(excelData['学科老师分布'].dataList);
ret['xklsfb'] = getKeyValueOut('学科老师分布', xklsfbPackageData);
let gzzlxfbPackageData = keyValuePackage(excelData['工作站类型分布'].dataList);
ret['gzzlxfb'] = getKeyValueOut('工作站类型分布', gzzlxfbPackageData);
let lngzzlxfbPackageData = keyValuePackage(excelData['历年工作站类型分布'].dataList);
ret['lngzzlxfb'] = getKeyValueOut('历年工作站类型分布', lngzzlxfbPackageData);
let xbqkPackageData = keyValuePackage(excelData['选拔情况'].dataList);
ret['xbqk'] = getKeyValueOut('选拔情况', xbqkPackageData);
let kczyPackageData = keyValuePackage(excelData['课程资源'].dataList);
ret['kczy'] = getKeyValueOut('课程资源', kczyPackageData);
let pxhdPackageData = keyValuePackage(excelData['培训活动'].dataList);
ret['pxhd'] = getKeyValueOut('培训活动', pxhdPackageData);
let xzkczysPackageData = keyValuePackage(excelData['新增课程资源数'].dataList);
ret['xzkczys'] = getKeyValueOut('新增课程资源数', xzkczysPackageData);
let xzpxhdsPackageData = keyValuePackage(excelData['新增培训活动数'].dataList);
ret['xzpxhds'] = getKeyValueOut('新增培训活动数', xzpxhdsPackageData);
let kczylxsPackageData = keyValuePackage(excelData['课程资源类型数'].dataList);
ret['kczylxs'] = getKeyValueOut('课程资源类型数', kczylxsPackageData);
let pxhdlxsPackageData = keyValuePackage(excelData['培训活动类型数'].dataList);
ret['pxhdlxs'] = getKeyValueOut('培训活动类型数', pxhdlxsPackageData);
let kczytsktPackageData = keyValuePackage(excelData['课程资源特色课题'].dataList);
ret['kczytskt'] = getKeyValueOut('课程资源特色课题', kczytsktPackageData);
let pxhdtsktPackageData = keyValuePackage(excelData['培训活动特色课题'].dataList);
ret['pxhdtskt'] = getKeyValueOut('培训活动特色课题', pxhdtsktPackageData);
let gzzfbjzPackageData = keyValuePackage(excelData['工作站分布键值'].dataList);
ret['gzzfbjz'] = getKeyValueOut('工作站分布键值', gzzfbjzPackageData);
let lngzzfbjzPackageData = keyValuePackage(excelData['历年工作站分布键值'].dataList);
ret['lngzzfbjz'] = getKeyValueOut('历年工作站分布键值', lngzzfbjzPackageData);
let rcglPackageData = keyValuePackage(excelData['日常管理'].dataList);
ret['rcgl'] = getKeyValueOut('日常管理', rcglPackageData);
let xskqfxPackageData = keyValuePackage(excelData['学生考勤分析'].dataList);
ret['xskqfx'] = getKeyValueOut('学生考勤分析', xskqfxPackageData);
let ktyjPackageData = keyValuePackage(excelData['课题研究'].dataList);
ret['ktyj'] = getKeyValueOut('课题研究', ktyjPackageData);
let yxxyPackageData = keyValuePackage(excelData['优秀学员'].dataList);
ret['yxxy'] = getKeyValueOut('优秀学员', yxxyPackageData);
let dbPackageData = keyValuePackage(excelData['顶部'].dataList);
ret['db'] = getKeyValueOut('顶部', dbPackageData);
let ggzzxsslPackageData = keyValuePackage(excelData['各工作站学生数量'].dataList);
ret['ggzzxssl'] = getKeyValueOut('各工作站学生数量', ggzzxsslPackageData);
let zpjxTableData = tablePackage(excelData["作品奖项"].headerList[0], excelData["作品奖项"].bodyList);
ret['zpjx'] = getTableOut( '作品奖项', zpjxTableData);
let ktyjlbTableData = tablePackage(excelData["课题研究列表"].headerList[0], excelData["课题研究列表"].bodyList);
ret['ktyjlb'] = getTableOut( '课题研究列表', ktyjlbTableData);
res.send(ret);
}
\ No newline at end of file
import { MapDistrictDataDefault } from '../config/healthConfig';
import { ssk1TableData } from '../data/table/ssk1Data';
import { doubleYBarCharPackage, keyValuePackage, onceYBarChartPackage, rankPackage, tablePackage } from '../dataPackage/inFrontOut';
import { getDoubleYBarChartOut, getKeyValueOut, getOnceYBarChartOut, getTableOut } from '../dataPackage/out';
/* 申生康1 */
export function getData(req, res) {
let excelData = ssk1TableData();
let ret:any = {};
let xdrsfxPackageData = onceYBarChartPackage( excelData['学段人数分析'], '','');
ret['xdrsfx'] = getOnceYBarChartOut('学段人数分析', xdrsfxPackageData);
// let xdrsfxTableData = tablePackage(excelData["学段人数分析"].headerList[0], excelData["学段人数分析"].bodyList);
// ret['xdrsfx'] = getTableOut( '学段人数分析', xdrsfxTableData);
let jyzsblPackageData = keyValuePackage(excelData['近一周上报率'].dataList);
ret['jyzsbl'] = getKeyValueOut('近一周上报率', jyzsblPackageData);
let ybqkqsyyPackageData = tablePackage(excelData["因病缺课趋势_月"].headerList[0], excelData["因病缺课趋势_月"].bodyList);
ret['ybqkqsyy'] = getTableOut( '因病缺课趋势_月', ybqkqsyyPackageData);
let ybqkqsynPackageData = tablePackage(excelData["因病缺课趋势_年"].headerList[0], excelData["因病缺课趋势_年"].bodyList);
ret['ybqkqsyn'] = getTableOut( '因病缺课趋势_年', ybqkqsynPackageData);
let ybqkqsyzPackageData = tablePackage(excelData["因病缺课趋势_周"].headerList[0], excelData["因病缺课趋势_周"].bodyList);
ret['ybqkqsyz'] = getTableOut( '因病缺课趋势_周', ybqkqsyzPackageData);
let jqqkyyzbPackageData = tablePackage(excelData["学生近期缺课原因占比"].headerList[0], excelData["学生近期缺课原因占比"].bodyList);
ret['jqqkyyzb'] = getTableOut( '学生近期缺课原因占比', jqqkyyzbPackageData);
let jbqkPackageData = keyValuePackage(excelData['基本情况_全市'].dataList);
ret['jbqk'] = getKeyValueOut('基本情况(全市)', jbqkPackageData);
let xbzbxsPackageData = keyValuePackage(excelData['性别占比_学生'].dataList);
ret['xbzbxs'] = getKeyValueOut('性别占比_学生', xbzbxsPackageData);
let xbzblsPackageData = keyValuePackage(excelData['性别占比_老师'].dataList);
ret['xbzbls'] = getKeyValueOut('性别占比_老师', xbzblsPackageData);
let gqxssfbPackageData = keyValuePackage(excelData['各区学生数分布'].dataList);
ret['gqxssfb'] = getKeyValueOut('各区学生数分布', gqxssfbPackageData);
let gqjssfbPackageData = keyValuePackage(excelData['各区教师数分布'].dataList);
ret['gqjssfb'] = getKeyValueOut('各区教师数分布', gqjssfbPackageData);
let gqjgsfbPackageData = keyValuePackage(excelData['各区机构数分布'].dataList);
ret['gqjgsfb'] = getKeyValueOut('各区机构数分布', gqjgsfbPackageData);
let xsjqybqkrsPackageData = keyValuePackage(excelData['学生近期因病缺课人数'].dataList);
ret['xsjqybqkrs'] = getKeyValueOut('学生近期因病缺课人数', xsjqybqkrsPackageData);
let jzgjqybqkrsPackageData = keyValuePackage(excelData['教职工近期因病缺课人数'].dataList);
ret['jzgjqybqkrs'] = getKeyValueOut('教职工近期因病缺课人数', jzgjqybqkrsPackageData);
let jyzsbqkPackageData = keyValuePackage(excelData['近一周上报情况'].dataList);
ret['jyzsbqk'] = getKeyValueOut('近一周上报情况', jyzsbqkPackageData);
let jqgfjbphPackageData = keyValuePackage(excelData['近期高发疾病排行'].dataList);
ret['jqgfjbph'] = getKeyValueOut('近期高发疾病排行', jqgfjbphPackageData);
// let jrwsbxxTableData = tablePackage(excelData["今日未上报学校"].headerList[0], excelData["今日未上报学校"].bodyList);
// ret['jrwsbxx'] = getTableOut( '今日未上报学校', jrwsbxxTableData);
let xyjkznglTableData = tablePackage(excelData["校园健康智能管理"].headerList[0], excelData["校园健康智能管理"].bodyList);
ret['xyjkzngl'] = getTableOut( '校园健康智能管理', xyjkznglTableData);
// let jjxmzTableData = tablePackage(excelData["聚集性苗子"].headerList[0], excelData["聚集性苗子"].bodyList);
// ret['jjxmz'] = getTableOut( '聚集性苗子', jjxmzTableData);
let brkgfjbqsPackageData = onceYBarChartPackage( excelData['百日咳高发疾病趋势'], '','');
ret['brkgfjbqs'] = getOnceYBarChartOut('百日咳高发疾病趋势', brkgfjbqsPackageData);
let jxshxdgrgfjbqsPackageData = onceYBarChartPackage( excelData['急性上呼吸道感染高发疾病趋势'], '','');
ret['jxshxdgrgfjbqs'] = getOnceYBarChartOut('急性上呼吸道感染高发疾病趋势', jxshxdgrgfjbqsPackageData);
let fygfjbqsPackageData = onceYBarChartPackage( excelData['肺炎高发疾病趋势'], '','');
ret['fygfjbqs'] = getOnceYBarChartOut('肺炎高发疾病趋势', fygfjbqsPackageData);
let cwygfjbqsPackageData = onceYBarChartPackage( excelData['肠胃炎高发疾病趋势'], '','');
ret['cwygfjbqs'] = getOnceYBarChartOut('肠胃炎高发疾病趋势', cwygfjbqsPackageData);
let bzrsfxPackageData = onceYBarChartPackage( excelData['病症人数分析'], '','');
ret['bzrsfx'] = getOnceYBarChartOut('病症人数分析', bzrsfxPackageData);
let tybfsjqkfxTableData = keyValuePackage(excelData['托幼病发时间情况分析'].dataList);
ret['tybfsjqkfx'] = getKeyValueOut('托幼病发时间情况分析', tybfsjqkfxTableData);
let xxbfsjqkfxTableData = keyValuePackage(excelData['小学病发时间情况分析'].dataList);
ret['xxbfsjqkfx'] = getKeyValueOut('小学病发时间情况分析', xxbfsjqkfxTableData);
let czbfsjqkfxTableData = keyValuePackage(excelData['初中病发时间情况分析'].dataList);
ret['czbfsjqkfx'] = getKeyValueOut('初中病发时间情况分析', czbfsjqkfxTableData);
let gzbfsjqkfxTableData = keyValuePackage(excelData['高中病发时间情况分析'].dataList);
ret['gzbfsjqkfx'] = getKeyValueOut('高中病发时间情况分析', gzbfsjqkfxTableData);
let dxbfsjqkfxTableData = keyValuePackage(excelData['大学病发时间情况分析'].dataList);
ret['dxbfsjqkfx'] = getKeyValueOut('大学病发时间情况分析', dxbfsjqkfxTableData);
res.send(ret);
}
/**
* 今日未上报学校
* @param req
* @param res
*/
export function getJrsbxx(req, res) {
let ret:any = {};
let excelData = ssk1TableData();
let cityName = req.body.cityName;
let jrsbxx = [];
let total = 0;
let jrsbxxData = excelData["今日未上报学校"].dataList;
for(let key in jrsbxxData) {
let schoolList = jrsbxxData[key].value.split(",");
if (cityName == "全市") {
jrsbxx.push({key:jrsbxxData[key].key, value:schoolList});
total += schoolList.length;
} else {
if (jrsbxxData[key].key == cityName) {
jrsbxx.push({key:jrsbxxData[key].key, value:schoolList});
total += schoolList.length;
}
}
}
ret["jswsbxx"] = {title:"今日未上报学校", dataList:jrsbxx, total};
res.send(ret);
}
/**
* 今日未上报学校区域选择下拉
* @param req
* @param res
*/
export function getCityName(req, res) {
let ret:any = {};
let excelData = ssk1TableData();
let cityNameList = ["全市"];
let jrsbxxData = excelData["今日未上报学校"].dataList;
for(let key in jrsbxxData) {
cityNameList.push(jrsbxxData[key].key);
}
ret["cityName"] = {title:"今日未上报学校区域选择下拉", dataList:cityNameList};
res.send(ret);
}
/**
* 地图
* @param req
* @param res
*/
export function getMap(req, res) {
let ret:any = {};
let mapData = MapDistrictDataDefault;
ret["map"] = {title:"地图", data:mapData};
let jjxmzEnum = {
1:"校级苗子",
2:"区级苗子",
3:"市级苗子",
}
let jjxmz = [];
for(let key in jjxmzEnum) {
jjxmz.push({key:key, value:jjxmzEnum[key]});
}
ret["jjxmzType"] = {title:"聚集性苗子类型", data:jjxmz};
let ybqkfbEnum = {
1:"1-10",
2:"11-20",
3:"21-30"
}
let ybqkfb = [];
for(let key in ybqkfbEnum) {
ybqkfb.push({key:key, value:ybqkfbEnum[key]});
}
ret["ybqkfbType"] = {title:"因病缺课分布类型", data:ybqkfb};
res.send(ret);
}
\ No newline at end of file
import { ssk2TableData } from '../data/table/ssk2Data';
import { doubleYBarCharPackage, keyValuePackage, onceYBarChartPackage, rankPackage, tablePackage } from '../dataPackage/inFrontOut';
import { getDoubleYBarChartOut, getKeyValueOut, getOnceYBarChartOut, getTableOut } from '../dataPackage/out';
/* 申生康2 */
export function getData(req, res) {
let excelData = ssk2TableData();
let ret:any = {};
let xdrsfxPackageData = onceYBarChartPackage( excelData['学段人数分析'], '','');
ret['xdrsfx'] = getOnceYBarChartOut('学段人数分析', xdrsfxPackageData);
let sbqkPackageData = onceYBarChartPackage( excelData['近一周上报情况'], '','');
ret['sbqk'] = getOnceYBarChartOut('近一周上报情况', sbqkPackageData);
let ybqkPackageData = onceYBarChartPackage( excelData['因病缺课(月)'], '','');
ret['ybqk'] = getOnceYBarChartOut('因病缺课(月)', ybqkPackageData);
let gfjbqsPackageData = onceYBarChartPackage( excelData['高发疾病趋势(百日咳)'], '','');
ret['gfjbqs'] = getOnceYBarChartOut('高发疾病趋势(百日咳)', gfjbqsPackageData);
let bzrsfbPackageData = onceYBarChartPackage( excelData['病症人数分布'], '','');
ret['bzrsfb'] = getOnceYBarChartOut('病症人数分布', bzrsfbPackageData);
let jqybqkyyzbPackageData = keyValuePackage(excelData['近期因病缺课原因占比'].dataList);
ret['jqybqkyyzb'] = getKeyValueOut('近期因病缺课原因占比', jqybqkyyzbPackageData);
let jbqkPackageData = keyValuePackage(excelData['基本情况(全市)'].dataList);
ret['jbqk'] = getKeyValueOut('基本情况(全市)', jbqkPackageData);
let xbzbPackageData = keyValuePackage(excelData['性别占比(学生|教师)'].dataList);
ret['xbzb'] = getKeyValueOut('性别占比(学生|教师)', xbzbPackageData);
let gqxssfbPackageData = keyValuePackage(excelData['各区学生数分布'].dataList);
ret['gqxssfb'] = getKeyValueOut('各区学生数分布', gqxssfbPackageData);
let gqjssfbPackageData = keyValuePackage(excelData['各区教师数分布'].dataList);
ret['gqjssfb'] = getKeyValueOut('各区教师数分布', gqjssfbPackageData);
let gqjgsfbPackageData = keyValuePackage(excelData['各区机构数分布'].dataList);
ret['gqjgsfb'] = getKeyValueOut('各区机构数分布', gqjgsfbPackageData);
let jyzsbqkPackageData = keyValuePackage(excelData['近一周上报情况'].dataList);
ret['jyzsbqk'] = getKeyValueOut('近一周上报情况', jyzsbqkPackageData);
let jjxmzPackageData = keyValuePackage(excelData['聚集性苗子'].dataList);
ret['jjxmz'] = getKeyValueOut('聚集性苗子', jjxmzPackageData);
let jbmzPackageData = keyValuePackage(excelData['疾病苗子'].dataList);
ret['jbmz'] = getKeyValueOut('疾病苗子', jbmzPackageData);
let jrwsbxxTableData = tablePackage(excelData["今日未上报学校"].headerList[0], excelData["今日未上报学校"].bodyList);
ret['jrwsbxx'] = getTableOut( '今日未上报学校', jrwsbxxTableData);
let xyjkznglTableData = tablePackage(excelData["校园健康智能管理"].headerList[0], excelData["校园健康智能管理"].bodyList);
ret['xyjkzngl'] = getTableOut( '校园健康智能管理', xyjkznglTableData);
let zzmzPackageData = keyValuePackage(excelData['症状苗子'].dataList);
ret['zzmz'] = getKeyValueOut('症状苗子', zzmzPackageData);
let jqybqkrsPackageData = keyValuePackage(excelData['近期因病缺课人数'].dataList);
ret['jqybqkrs'] = getKeyValueOut('近期因病缺课人数', jqybqkrsPackageData);
let jqgfjbphPackageData = keyValuePackage(excelData['近期高发疾病排行'].dataList);
ret['jqgfjbph'] = getKeyValueOut('近期高发疾病排行', jqgfjbphPackageData);
let bfsjqkfxTableData = tablePackage(excelData["病发时间情况分析"].headerList[0], excelData["病发时间情况分析"].bodyList);
ret['bfsjqkfx'] = getTableOut( '病发时间情况分析', bfsjqkfxTableData);
res.send(ret);
}
\ No newline at end of file
import { ssk3TableData } from '../data/table/ssk3Data';
import { doubleYBarCharPackage, keyValuePackage, onceYBarChartPackage, rankPackage, tablePackage } from '../dataPackage/inFrontOut';
import { getDoubleYBarChartOut, getKeyValueOut, getOnceYBarChartOut, getTableOut } from '../dataPackage/out';
/* 申生康3 */
export function getData(req, res) {
let excelData = ssk3TableData();
let ret:any = {};
let xdrsfxPackageData = onceYBarChartPackage( excelData['学段人数分析'], '','');
ret['xdrsfx'] = getOnceYBarChartOut('学段人数分析', xdrsfxPackageData);
let sbqkPackageData = onceYBarChartPackage( excelData['近一周上报情况'], '','');
ret['sbqk'] = getOnceYBarChartOut('近一周上报情况', sbqkPackageData);
let ybqkqsPackageData = onceYBarChartPackage( excelData['因病缺课趋势'], '','');
ret['ybqkqs'] = getOnceYBarChartOut('因病缺课趋势', ybqkqsPackageData);
let gfjbqsPackageData = onceYBarChartPackage( excelData['高发疾病趋势'], '','');
ret['gfjbqs'] = getOnceYBarChartOut('高发疾病趋势', gfjbqsPackageData);
let bzrsfbPackageData = onceYBarChartPackage( excelData['病症人数分布'], '','');
ret['bzrsfb'] = getOnceYBarChartOut('病症人数分布', bzrsfbPackageData);
let jqybqkyyfxPackageData = keyValuePackage(excelData['近期因病缺课原因分析'].dataList);
ret['jqybqkyyfx'] = getKeyValueOut('近期因病缺课原因分析', jqybqkyyfxPackageData);
let jbqkPackageData = keyValuePackage(excelData['基本情况(全市)'].dataList);
ret['jbqk'] = getKeyValueOut('基本情况(全市)', jbqkPackageData);
let xbzbPackageData = keyValuePackage(excelData['性别占比(学生|教师)'].dataList);
ret['xbzb'] = getKeyValueOut('性别占比(学生|教师)', xbzbPackageData);
let gqxssfbPackageData = keyValuePackage(excelData['各区学生数分布'].dataList);
ret['gqxssfb'] = getKeyValueOut('各区学生数分布', gqxssfbPackageData);
let gqjssfbPackageData = keyValuePackage(excelData['各区教师数分布'].dataList);
ret['gqjssfb'] = getKeyValueOut('各区教师数分布', gqjssfbPackageData);
let gqjgsfbPackageData = keyValuePackage(excelData['各区机构数分布'].dataList);
ret['gqjgsfb'] = getKeyValueOut('各区机构数分布', gqjgsfbPackageData);
let jyzsbqkPackageData = keyValuePackage(excelData['近一周上报情况'].dataList);
ret['jyzsbqk'] = getKeyValueOut('近一周上报情况', jyzsbqkPackageData);
let jjxmzPackageData = keyValuePackage(excelData['聚集性苗子'].dataList);
ret['jjxmz'] = getKeyValueOut('聚集性苗子', jjxmzPackageData);
let jbmzPackageData = keyValuePackage(excelData['疾病苗子'].dataList);
ret['jbmz'] = getKeyValueOut('疾病苗子', jbmzPackageData);
let zzmzPackageData = keyValuePackage(excelData['症状苗子'].dataList);
ret['zzmz'] = getKeyValueOut('症状苗子', zzmzPackageData);
let jqybqkrsPackageData = keyValuePackage(excelData['近期因病缺课人数'].dataList);
ret['jqybqkrs'] = getKeyValueOut('近期因病缺课人数', jqybqkrsPackageData);
let jqgfjbphPackageData = keyValuePackage(excelData['近期高发疾病排行'].dataList);
ret['jqgfjbph'] = getKeyValueOut('近期高发疾病排行', jqgfjbphPackageData);
let jrwsbxxTableData = tablePackage(excelData["今日未上报学校"].headerList[0], excelData["今日未上报学校"].bodyList);
ret['jrwsbxx'] = getTableOut( '今日未上报学校', jrwsbxxTableData);
let xyjkznglTableData = tablePackage(excelData["校园健康智能管理"].headerList[0], excelData["校园健康智能管理"].bodyList);
ret['xyjkzngl'] = getTableOut( '校园健康智能管理', xyjkznglTableData);
let bfsjqkfxTableData = tablePackage(excelData["病发时间情况分析"].headerList[0], excelData["病发时间情况分析"].bodyList);
ret['bfsjqkfx'] = getTableOut( '病发时间情况分析', bfsjqkfxTableData);
res.send(ret);
}
\ No newline at end of file
import { ysysdaTableData } from '../data/table/ysysdaData';
import { doubleYBarCharPackage, keyValuePackage, onceYBarChartPackage, rankPackage, tablePackage } from '../dataPackage/inFrontOut';
import { getDoubleYBarChartOut, getKeyValueOut, getOnceYBarChartOut, getTableOut } from '../dataPackage/out';
/* 一生一档案 */
export function getData(req, res) {
let excelData = ysysdaTableData();
let ret:any = {};
let xxfffxPackageData = keyValuePackage(excelData['学习方法分析'].dataList);
ret['xxfffx'] = getKeyValueOut('学习方法分析', xxfffxPackageData);
let yxxsxxbTableData = keyValuePackage(excelData["优秀学生信息表"].dataList);
ret['yxxsxxb'] = getKeyValueOut( '优秀学生信息表', yxxsxxbTableData);
let gzxxbTableData = keyValuePackage(excelData["工作信息表"].dataList);
ret['gzxxb'] = getKeyValueOut( '工作信息表', gzxxbTableData);
let jdgxTableData = keyValuePackage(excelData["阶段感想"].dataList);
ret['jdgx'] = getKeyValueOut( '阶段感想', jdgxTableData);
let kqfxPackageData = keyValuePackage(excelData['考情分析'].dataList);
ret['kqfx'] = getKeyValueOut('考情分析', kqfxPackageData);
let tcyyfxPackageData = keyValuePackage(excelData['退出原因分析'].dataList);
ret['tcyyfx'] = getKeyValueOut('退出原因分析', tcyyfxPackageData);
let zpjxPackageData = keyValuePackage(excelData['作品奖项'].dataList);
ret['zpjx'] = getKeyValueOut('作品奖项', zpjxPackageData);
let yynrhzPackageData = onceYBarChartPackage( excelData['原因内容汇总'], '','');
ret['yynrhz'] = getOnceYBarChartOut('原因内容汇总', yynrhzPackageData);
let fkypgPackageData = onceYBarChartPackage(excelData['反馈与评估'], '','');
ret['fkypg'] = getOnceYBarChartOut('反馈与评估', fkypgPackageData);
let ktyjjdTableData = tablePackage(excelData["课题研究进度"].headerList[0], excelData["课题研究进度"].bodyList);
ret['ktyjjd'] = getTableOut( '课题研究进度', ktyjjdTableData);
let sjktyjjdTableData = tablePackage(excelData["市级课题研究进度"].headerList[0], excelData["市级课题研究进度"].bodyList);
ret['sjktyjjd'] = getTableOut( '市级课题研究进度', sjktyjjdTableData);
let hjlbTableData = tablePackage(excelData["获奖列表"].headerList[0], excelData["获奖列表"].bodyList);
ret['hjlb'] = getTableOut( '获奖列表', hjlbTableData);
res.send(ret);
}
\ No newline at end of file
import { zyhdbzTableData } from '../data/table/zyhdbzData';
import { doubleYBarCharPackage, keyValuePackage, onceYBarChartPackage, rankPackage, tablePackage } from '../dataPackage/inFrontOut';
import { getDoubleYBarChartOut, getKeyValueOut, getOnceYBarChartOut, getTableOut } from '../dataPackage/out';
/* 重要活动保障 */
export function getData(req, res) {
let excelData = zyhdbzTableData();
let ret:any = {};
let fwllqsPackageData = onceYBarChartPackage( excelData['访问流量趋势'], '','');
ret['fwllqs'] = getOnceYBarChartOut('访问流量趋势', fwllqsPackageData);
let kphd1zgkpblPackageData = keyValuePackage(excelData['科普活动1-中国科普博览'].dataList);
ret['kphd1zgkpbl'] = getKeyValueOut('科普活动-中国科普博览', kphd1zgkpblPackageData);
let qsnrgznalpktzsPackageData = keyValuePackage(excelData['青少年人工智能奥林匹克挑战赛'].dataList);
ret['qsnrgznalpktzs'] = getKeyValueOut('青少年人工智能奥林匹克挑战赛', qsnrgznalpktzsPackageData);
let csdnhdkfzhddbyPackageData = keyValuePackage(excelData['CSDN活动-开发者活动大本营'].dataList);
ret['csdnhdkfzhddby'] = getKeyValueOut('CSDN活动-开发者活动大本营', csdnhdkfzhddbyPackageData);
let yzzykyrjfhPackageData = keyValuePackage(excelData['亚洲自由开源软件峰会'].dataList);
ret['yzzykyrjfh'] = getKeyValueOut('亚洲自由开源软件峰会', yzzykyrjfhPackageData);
let mbazkbkPackageData = keyValuePackage(excelData['MBA智库百科'].dataList);
ret['mbazkbk'] = getKeyValueOut('MBA智库百科', mbazkbkPackageData);
let kphd2zgkpblPackageData = keyValuePackage(excelData['科普活动2-中国科普博览'].dataList);
ret['kphd2zgkpbl'] = getKeyValueOut('科普活动-中国科普博览', kphd2zgkpblPackageData);
let dhlPackageData = keyValuePackage(excelData['导航栏'].dataList);
ret['dhl'] = getKeyValueOut('导航栏', dhlPackageData);
let hdztPackageData = keyValuePackage(excelData['活动状态'].dataList);
ret['hdzt'] = getKeyValueOut('活动状态', hdztPackageData);
res.send(ret);
}
\ No newline at end of file
import { zzbznbTableData } from '../data/table/zzb_100znbData';
import { doubleYBarCharPackage, keyValuePackage, onceYBarChartPackage, rankPackage, tablePackage } from '../dataPackage/inFrontOut';
import { getDoubleYBarChartOut, getKeyValueOut, getOnceYBarChartOut, getTableOut } from '../dataPackage/out';
/* 周周播_100周年版 */
export function getData(req, res) {
let excelData = zzbznbTableData();
let ret:any = {};
let kclbPackageData = onceYBarChartPackage( excelData['课程类别(艺术)'], '','');
ret['kclb'] = getOnceYBarChartOut('课程类别(艺术)', kclbPackageData);
let escsakctfptPackageData = onceYBarChartPackage( excelData['ESCSA课程投放平台'], '','月');
ret['escsakctfpt'] = getOnceYBarChartOut('ESCSA课程投放平台', escsakctfptPackageData);
let zgdxkctfptPackageData = onceYBarChartPackage( excelData['中国电信课程投放平台'], '','月');
ret['zgdxkctfpt'] = getOnceYBarChartOut('中国电信课程投放平台', zgdxkctfptPackageData);
let dfwjykctfptPackageData = onceYBarChartPackage( excelData['东方网教育课程投放平台'], '','月');
ret['dfwjykctfpt'] = getOnceYBarChartOut('东方网教育课程投放平台', dfwjykctfptPackageData);
let bilibilikctfptPackageData = onceYBarChartPackage( excelData['bilibili课程投放平台'], '','月');
ret['bilibilikctfpt'] = getOnceYBarChartOut('bilibili课程投放平台', bilibilikctfptPackageData);
let kcgkqsPackageData = onceYBarChartPackage( excelData['课程观看趋势(本周)'], '','');
ret['kcgkqs'] = getOnceYBarChartOut('课程观看趋势(本周)', kcgkqsPackageData);
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 kcsfxPackageData = keyValuePackage(excelData['课程数分析'].dataList);
ret['kcsfx'] = getKeyValueOut('课程数分析', kcsfxPackageData);
let sslfxPackageData = keyValuePackage(excelData['搜索栏分析'].dataList);
ret['sslfx'] = getKeyValueOut('搜索栏分析', sslfxPackageData);
let kcxxPackageData = keyValuePackage(excelData['课程信息'].dataList);
ret['kcxx'] = getKeyValueOut('课程信息', kcxxPackageData);
let kcfksjPackageData = keyValuePackage(excelData['课程反馈数据'].dataList);
ret['kcfksj'] = getKeyValueOut('课程反馈数据', kcfksjPackageData);
let kcbfqkPackageData = keyValuePackage(excelData['课程播放情况'].dataList);
ret['kcbfqk'] = getKeyValueOut('课程播放情况', kcbfqkPackageData);
let rmkcphtop10PackageData = keyValuePackage(excelData['热门课程排行top10(本周)'].dataList);
ret['rmkcphtop10'] = getKeyValueOut('热门课程排行top10(本周)', rmkcphtop10PackageData);
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);
let ptbflqsPackageData = onceYBarChartPackage( excelData['平台播放量趋势'], '','');
ret['ptbflqs'] = getOnceYBarChartOut('平台播放量趋势', ptbflqsPackageData);
let kcsczflPackageData = onceYBarChartPackage( excelData['课程收藏/转发量'], '','月');
ret['kcsczfl'] = getOnceYBarChartOut('课程收藏/转发量', kcsczflPackageData);
let kclxrdphPackageData = onceYBarChartPackage( excelData['课程类型热度排行'], '','');
ret['kclxrdph'] = getOnceYBarChartOut('课程类型热度排行', kclxrdphPackageData);
res.send(ret);
}
\ No newline at end of file
import { zzbrcbTableData } from '../data/table/zzb_rcbData';
import { doubleYBarCharPackage, keyValuePackage, onceYBarChartPackage, rankPackage, tablePackage } from '../dataPackage/inFrontOut';
import { getDoubleYBarChartOut, getKeyValueOut, getOnceYBarChartOut, getTableOut } from '../dataPackage/out';
/* 周周播_日程版 */
export function getData(req, res) {
let excelData = zzbrcbTableData();
let ret:any = {};
let kclbPackageData = keyValuePackage(excelData['课程类别_艺术'].dataList);
ret['kclb'] = getKeyValueOut('课程类别(艺术)', kclbPackageData);
let escsakctfptPackageData = keyValuePackage(excelData['ESCSA课程投放平台'].dataList);
ret['escsakctfpt'] = getKeyValueOut('ESCSA课程投放平台', escsakctfptPackageData);
let zgdxkctfptPackageData = onceYBarChartPackage( excelData['中国电信课程投放平台'], '','月');
ret['zgdxkctfpt'] = getOnceYBarChartOut('中国电信课程投放平台', zgdxkctfptPackageData);
let dfwjykctfptPackageData = onceYBarChartPackage( excelData['东方网教育课程投放平台'], '','月');
ret['dfwjykctfpt'] = getOnceYBarChartOut('东方网教育课程投放平台', dfwjykctfptPackageData);
let bilibilikctfptPackageData = onceYBarChartPackage( excelData['bilibili课程投放平台'], '','月');
ret['bilibilikctfpt'] = getOnceYBarChartOut('bilibili课程投放平台', bilibilikctfptPackageData);
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 kcsfxPackageData = keyValuePackage(excelData['课程数分析'].dataList);
ret['kcsfx'] = getKeyValueOut('课程数分析', kcsfxPackageData);
let sslfxPackageData = keyValuePackage(excelData['搜索栏分析'].dataList);
ret['sslfx'] = getKeyValueOut('搜索栏分析', sslfxPackageData);
let kcxxPackageData = keyValuePackage(excelData['课程信息'].dataList);
ret['kcxx'] = getKeyValueOut('课程信息', kcxxPackageData);
let kcfksjPackageData = keyValuePackage(excelData['课程反馈数据'].dataList);
ret['kcfksj'] = getKeyValueOut('课程反馈数据', kcfksjPackageData);
let kcbfqkPackageData = keyValuePackage(excelData['课程播放情况'].dataList);
ret['kcbfqk'] = getKeyValueOut('课程播放情况', kcbfqkPackageData);
let rmkcphtop10PackageData = keyValuePackage(excelData['热门课程排行top10_本周'].dataList);
ret['rmkcphtop10'] = getKeyValueOut('热门课程排行top10(本周)', rmkcphtop10PackageData);
// let kcgkqsPackageData = onceYBarChartPackage( excelData['课程观看趋势(本周)'], '','');
// ret['kcgkqs'] = getOnceYBarChartOut('课程观看趋势(本周)', kcgkqsPackageData);
let ptbflqsPackageData = onceYBarChartPackage( excelData['9月平台播放量趋势'], '','');
ret['ptbflqs'] = getOnceYBarChartOut('9月平台播放量趋势', ptbflqsPackageData);
let kcsczflPackageData = onceYBarChartPackage( excelData['课程收藏/转发量'], '','月');
ret['kcsczfl'] = getOnceYBarChartOut('课程收藏/转发量', kcsczflPackageData);
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);
}
\ No newline at end of file
export enum INTERFACErEQUESTTYPEENUM {
即时更新 = 1,
定时更新
}
\ No newline at end of file
export enum ERRORENUM {
未找到数据,
数据操作失败,
暂无对应数据,
文件不存在,
参数错误,
地址数据不完整,
请完善信息,
接口数据获取失败
}
export enum SYSTEMERRORENUM {
参数错误 = 1,
您的登录已失效,
您的账户没有访问权限,
请求参数错误,
文件解析失败,
文件写入失败,
获取企业微信access_token失败,
获取企业微信用户信息失败,
请先绑定用户,
TOKEN失效,
该微信用户已绑定过账号,
存在TOKEN并没有绑定角色,
初始化配置失败,
暂无对应数据
}
export enum INTERFACEERRORENUM {
"系统错误" = 10001,
"电站不存在" = 10002,
"电站ID为空" = 10003,
"时间格式不正确" = 10004,
"没有权限访问" = 10011,
"访问频率限制5分钟/次" = 10012,
"页数超过100" = 10013,
"页数不能大于250页" = 10014,
}
let bizErrorMsgMap = {};
for (let key in ERRORENUM) {
bizErrorMsgMap[ERRORENUM[key]] = key;
}
let systemErrorMsgMap = {};
for (let key in SYSTEMERRORENUM) {
systemErrorMsgMap[SYSTEMERRORENUM[key]] = key;
}
export function getBizMsg(param) {
return bizErrorMsgMap[param];
}
export function getSysMsg(param) {
return systemErrorMsgMap[param];
}
\ No newline at end of file
import { INTERFACErEQUESTTYPEENUM } from "./enum";
// 请把 "INTERFACErEQUESTTYPEENUM.即时更新" 改成 INTERFACErEQUESTTYPEENUM.即时更新 把引号去掉 【定时更新同理 】
export const Config = {"周周播(日程版)":{"type":"INTERFACErEQUESTTYPEENUM.即时更新","time":3600000,"url":"url地址","reqType":"post","header":{},"body":{}},"周周播(100周年版)":{"type":"INTERFACErEQUESTTYPEENUM.即时更新","time":3600000,"url":"url地址","reqType":"post","header":{},"body":{}},"青少年科技创新实践工作站":{"type":"INTERFACErEQUESTTYPEENUM.即时更新","time":3600000,"url":"url地址","reqType":"post","header":{},"body":{}},"一生一世档案":{"type":"INTERFACErEQUESTTYPEENUM.即时更新","time":3600000,"url":"url地址","reqType":"post","header":{},"body":{}},"重要活动保障":{"type":"INTERFACErEQUESTTYPEENUM.即时更新","time":3600000,"url":"url地址","reqType":"post","header":{},"body":{}},"教育优质资源":{"type":"INTERFACErEQUESTTYPEENUM.即时更新","time":3600000,"url":"url地址","reqType":"post","header":{},"body":{}},"科学研究院":{"type":"INTERFACErEQUESTTYPEENUM.即时更新","time":3600000,"url":"url地址","reqType":"post","header":{},"body":{}},"申生康1":{"type":"INTERFACErEQUESTTYPEENUM.即时更新","time":3600000,"url":"url地址","reqType":"post","header":{},"body":{}},"申生康2":{"type":"INTERFACErEQUESTTYPEENUM.即时更新","time":3600000,"url":"url地址","reqType":"post","header":{},"body":{}},"申生康3":{"type":"INTERFACErEQUESTTYPEENUM.即时更新","time":3600000,"url":"url地址","reqType":"post","header":{},"body":{}}};
\ No newline at end of file
const path = require('path');
import * as fs from "fs";
import { BizError, SysError } from "../util/bizError";
import { analysisXml } from "../util/myXML";
import { ServerConfig } from "./systemClass";
import { SYSTEMERRORENUM } from "./errorEnum";
export let systemConfig = new ServerConfig;
const ConfigName = "serverConfig.xml";
export async function initConfig() {
try {
let buff = fs.readFileSync(path.join(__dirname.substring(0,__dirname.indexOf("out")), ConfigName));
let configStr = buff.toString();
let configInfo:any = await analysisXml(configStr);
if (!configInfo || !configInfo.config) console.log("xml中无配置加载");
else {
//必要配置
let integralConfig = ["port", "imgPath"];
checkConfig(integralConfig, configInfo.config);
let {port, imgPath} = configInfo.config;
systemConfig.port = parseInt(port[0]);
systemConfig.imgPath = imgPath[0];
}
} catch(err) {
throw new BizError("服务器配置解析错误 请检查根目录下 serverConfig.xml 文件是否正确");
}
}
function checkConfig(config, configData) {
config.forEach(item => {
if (typeof item == "object") {
for (let key in item) {
if (!configData[key] || !configData[key][0]) {
throw new SysError(SYSTEMERRORENUM.初始化配置失败, `serverConfig.xml中 缺少 ${key}`);
}
item[key].forEach( subItem => {
if (!configData[key][0][subItem] || !configData[key][0][subItem][0]) {
throw new SysError(SYSTEMERRORENUM.初始化配置失败, `serverConfig.xml中 ${key}缺少 ${subItem}`);
}
});
}
} else {
if (!configData[item] || !configData[item][0]) {
throw new SysError(SYSTEMERRORENUM.初始化配置失败, `serverConfig.xml中 缺少 ${item}`);
}
}
});
}
/**
* 系统配置类
*/
export class ServerConfig {
port:number;
imgPath:string;
}
//接口任务 定期更新
import { INTERFACErEQUESTTYPEENUM } from "../../config/enum";
import { Config } from "../../config/interfaceConfig";
import { BizError } from "../../util/bizError";
import { get, post, postForm } from "../../util/request";
//初始化接口数据
export async function initInterfaceData() {
const InitTaskSuccess = await taskUpdate();
if (!InitTaskSuccess) throw new BizError("服务器启动失败: 初始化定时接口数据时出现问题 请检查目标服务器或本地请求配置");
const InitRealTimeSuccess = await initRealTime();
if (!InitRealTimeSuccess) throw new BizError("服务器启动失败: 初始化实时接口数据时出现问题 请检查目标服务器或本地请求配置");
console.log("初始化接口数据成功");
setInterval(() => {
taskUpdate();
}, 10000);
}
//异常接口 不更新数据
let errorInterfaceInfo = {};
//定时接口 数据更新情况
let updateInfo = {
"接口名称":{lastTime:0, updateUseTime:0},//使用时间是毫秒
};
//定时接口 缓存数据
let dataQueue = {};
async function taskUpdate() {
let thisTaskInfo = [];//此次任务
let defaultUseTime = 60000;
let thisTime = new Date().valueOf();
let initSuccess = true;
for (let interfaceName in Config) {
const LastReqError = errorInterfaceInfo[interfaceName];
if (LastReqError) {
console.log(`${interfaceName} 请求时出现过 ${LastReqError} 异常 保险起见此次更新不再请求`);
continue;
}
const ThisConfig = Config[interfaceName];
if (ThisConfig.type == INTERFACErEQUESTTYPEENUM.即时更新) continue;
let lastTaskInfo = updateInfo[interfaceName];
if ( !lastTaskInfo ) thisTaskInfo.push({name:defaultUseTime, useTime:defaultUseTime});
else if ( lastTaskInfo && (thisTime - lastTaskInfo) > ThisConfig.time ) {
thisTaskInfo.push({name:defaultUseTime, useTime:lastTaskInfo.updateUseTime});
}
defaultUseTime += 1;
}
thisTaskInfo.sort((a, b) => {return a.useTime - b.useTime});//耗时短的优先
for (let i = 0; i < thisTaskInfo.length; i++) { //更新数据
let {name} = thisTaskInfo[i];
const ThisConfig = Config[name];
const StartTime = new Date().valueOf();
let reqRes;
switch(ThisConfig.reqType) {
case "get": reqRes = await get(ThisConfig.url, ThisConfig.body, ThisConfig.header); break;
case "post": reqRes = await post(ThisConfig.url, ThisConfig.body, ThisConfig.header); break;
case "postForm": reqRes = await postForm(ThisConfig.url, ThisConfig.body); break;
}
const UseTime = new Date().valueOf() - StartTime;
if (reqRes.success) {
if (!updateInfo[name]) updateInfo[name] = {lastTime:thisTime, updateUseTime:UseTime};
else {
updateInfo[name].lastTime = thisTime;
updateInfo[name].updateUseTime = UseTime;
}
if (dataQueue[name]) delete dataQueue[name];
dataQueue[name] = JSON.stringify(reqRes.body);//放入缓存
} else {
let errorMsg = reqRes.message;
if (reqRes.message && reqRes.message.code == "ESOCKETTIMEDOUT") errorMsg = "超时";
console.log(`接口 ${name} 请求失败 失败原因${errorMsg}`);
if (["404", "503"].indexOf(errorMsg) > -1) { //下次不再请求
errorInterfaceInfo[name] = errorMsg;
}
initSuccess = false;
}
}
return initSuccess;
}
//即时数据缓存 当请求失败时会用到这里的数据
let realTimeDataQueue = {};
//即时数据初始化
export async function initRealTime() {
let initSuccess = true;
for (let interfaceName in Config) {
const ThisConfig = Config[interfaceName];
if (ThisConfig.type == INTERFACErEQUESTTYPEENUM.定时更新) continue;
let reqRes;
switch(ThisConfig.reqType) {
case "get": reqRes = await get(ThisConfig.url, ThisConfig.body, ThisConfig.header); break;
case "post": reqRes = await post(ThisConfig.url, ThisConfig.body, ThisConfig.header); break;
case "postForm": reqRes = await postForm(ThisConfig.url, ThisConfig.body); break;
}
if (!reqRes.success) {
console.log(`${interfaceName} 接口请求失败 请求地址为 ${ThisConfig.url} 失败原因 ${reqRes.message}`);
initSuccess = false;
}
realTimeDataQueue[interfaceName] = reqRes.data;
}
return initSuccess;
}
export async function getInterfaceByInterfaceName(name) {
const ThisConfig = Config[name];
let data:any;
if (ThisConfig.type == INTERFACErEQUESTTYPEENUM.即时更新) {
let reqRes;
switch(ThisConfig.reqType) {
case "get": reqRes = await get(ThisConfig.url, ThisConfig.body, ThisConfig.header); break;
case "post": reqRes = await post(ThisConfig.url, ThisConfig.body, ThisConfig.header); break;
case "postForm": reqRes = await postForm(ThisConfig.url, ThisConfig.body); break;
}
if (reqRes.success) {
data = reqRes.data;
} else {
data = realTimeDataQueue[name];
console.log(`${name}请求失败, 读取缓存数据`);
}
} else data = dataQueue[name];
return data;
}
import { changeListObjectToListByReflect, changeObjectKey, changeObjectToList, designativListKeyAddUnit, getDesignativByReflect } from "../../dataPackage/interfaceAnalysis";
import { BizError } from "../../util/bizError";
import { getInterfaceByInterfaceName } from "./cronJob";
function changeDataProcess(interfaceName, interfaceData, config) {
let result = {};
for (let dataName in config) {
let { type, operationsType, reflect, unitInfo } = config[dataName];
let fileData = interfaceData[dataName];
let fileType = typeof fileData;
let dataIsArray = Array.isArray(fileData);
if ( (type == "array" && !dataIsArray) || (type == "object" && dataIsArray) ||
(type == "object" && fileType != "object") || (type != "array" && fileType != type) ) {
throw new BizError(`接口 ${interfaceName}中的${dataName}类型错误应该为 ${type} 现在为${fileType}`);
}
let onceData;
switch (operationsType) {
case "object_ToList": onceData= changeObjectToList(fileData, reflect); break;
case "object_changeKey": onceData = changeObjectKey(fileData, reflect); break;
case "list_changeKey": onceData = changeListObjectToListByReflect(fileData, reflect); break;
}
if (unitInfo) onceData = designativListKeyAddUnit(onceData, unitInfo);
result[dataName] = onceData;
}
return result;
}
function jyyzzyInterfaceData() {
let jyyzzyinterfaceName = "教育优质资源";
let jyyzzyData:any = getInterfaceByInterfaceName(jyyzzyinterfaceName);
/*
kclx = 课程类型 ;
sbdwjg = 申报单位结构 ;
eskcpszlbk = 二审课程评审质量把控 ;
sskcpszlbk = 三审课程评审质量把控 ;
yskcpszlbk = 一审课程评审质量把控 ;
kclb = 课程类别 ;
rkzyys = 入库资源优势 ;
yzzyhz = 优质资源汇总 ;
yzkctopb = 优质课程TOP榜 ;
zxppzy = 专项品牌资源 ;
kcsscg = 课程实施成果 ;
zxgykc = 在线公益课程 ;
jxfwkc = 进校服务课程 ;
xwhzkc = 校外行走课程 ;
kclxsj = 课程类型数据 ;
kcpj/fk = 课程评价/反馈 ;
kcpjdj = 课程评价等级 ;
*/
let config = {"kclx":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"sbdwjg":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"eskcpszlbk":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"sskcpszlbk":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"yskcpszlbk":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"kclb":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"rkzyys":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"yzzyhz":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"yzkctopb":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"zxppzy":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"kcsscg":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"zxgykc":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"jxfwkc":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"xwhzkc":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"kclxsj":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"kcpj/fk":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"kcpjdj":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}}};
let interfaceData = Object.assign({}, jyyzzyData );
let changeData = changeDataProcess('教育优质资源', interfaceData, config);
//todo 剩下的就是将excel定好的数据和interface的数据关联起来了
}
import { changeListObjectToListByReflect, changeObjectKey, changeObjectToList, designativListKeyAddUnit, getDesignativByReflect } from "../../dataPackage/interfaceAnalysis";
import { BizError } from "../../util/bizError";
import { getInterfaceByInterfaceName } from "./cronJob";
function changeDataProcess(interfaceName, interfaceData, config) {
let result = {};
for (let dataName in config) {
let { type, operationsType, reflect, unitInfo } = config[dataName];
let fileData = interfaceData[dataName];
let fileType = typeof fileData;
let dataIsArray = Array.isArray(fileData);
if ( (type == "array" && !dataIsArray) || (type == "object" && dataIsArray) ||
(type == "object" && fileType != "object") || (type != "array" && fileType != type) ) {
throw new BizError(`接口 ${interfaceName}中的${dataName}类型错误应该为 ${type} 现在为${fileType}`);
}
let onceData;
switch (operationsType) {
case "object_ToList": onceData= changeObjectToList(fileData, reflect); break;
case "object_changeKey": onceData = changeObjectKey(fileData, reflect); break;
case "list_changeKey": onceData = changeListObjectToListByReflect(fileData, reflect); break;
}
if (unitInfo) onceData = designativListKeyAddUnit(onceData, unitInfo);
result[dataName] = onceData;
}
return result;
}
function kxyjyInterfaceData() {
let kxyjyinterfaceName = "科学研究院";
let kxyjyData:any = getInterfaceByInterfaceName(kxyjyinterfaceName);
/*
xdfb = 学段分布 ;
ktlx = 课题类型 ;
pyfs = 培养方式 ;
xyjyzs = 小研究院招收 ;
xsqk = 学生情况 ;
hdztfl = 活动主题分类 ;
qsnkxyjysj = 青少年科学研究院数据 ;
rcgf = 日常规范 ;
ktyj = 课题研究 ;
yjcg = 研究成果 ;
mszy = 名师资源 ;
yxxsfc = 优秀学生分采 ;
gzpy = 跟踪培养 ;
*/
let config = {"xdfb":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"ktlx":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"pyfs":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"xyjyzs":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"xsqk":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"hdztfl":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"qsnkxyjysj":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"rcgf":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"ktyj":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"yjcg":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"mszy":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"yxxsfc":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"gzpy":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}}};
let interfaceData = Object.assign({}, kxyjyData );
let changeData = changeDataProcess('科学研究院', interfaceData, config);
//todo 剩下的就是将excel定好的数据和interface的数据关联起来了
}
import { changeListObjectToListByReflect, changeObjectKey, changeObjectToList, designativListKeyAddUnit, getDesignativByReflect } from "../../dataPackage/interfaceAnalysis";
import { BizError } from "../../util/bizError";
import { getInterfaceByInterfaceName } from "./cronJob";
function changeDataProcess(interfaceName, interfaceData, config) {
let result = {};
for (let dataName in config) {
let { type, operationsType, reflect, unitInfo } = config[dataName];
let fileData = interfaceData[dataName];
let fileType = typeof fileData;
let dataIsArray = Array.isArray(fileData);
if ( (type == "array" && !dataIsArray) || (type == "object" && dataIsArray) ||
(type == "object" && fileType != "object") || (type != "array" && fileType != type) ) {
throw new BizError(`接口 ${interfaceName}中的${dataName}类型错误应该为 ${type} 现在为${fileType}`);
}
let onceData;
switch (operationsType) {
case "object_ToList": onceData= changeObjectToList(fileData, reflect); break;
case "object_changeKey": onceData = changeObjectKey(fileData, reflect); break;
case "list_changeKey": onceData = changeListObjectToListByReflect(fileData, reflect); break;
}
if (unitInfo) onceData = designativListKeyAddUnit(onceData, unitInfo);
result[dataName] = onceData;
}
return result;
}
function qsnkjcxsjgzzInterfaceData() {
let qsnkjcxsjgzzinterfaceName = "青少年科技创新实践工作站";
let qsnkjcxsjgzzData:any = getInterfaceByInterfaceName(qsnkjcxsjgzzinterfaceName);
/*
xklsfbzb = 学科老师分布占比 ;
gzzfbt = 工作站分布图 ;
2023xnsxqxbqk = 2023学年上学期选拔情况 ;
xklssj = 学科老师数据 ;
kczysj = 课程资源数据 ;
xzskczy = 新增设课程资源 ;
tskt = 特色课题 ;
cxsjgzzsj = 查询时间工作站数据 ;
gzzfb = 工作站分布 ;
ggzzxssl = 各工作站学生数量 ;
rcgl = 日常管理 ;
xskqs = 学生考勤数 ;
ktyjsjb = 课题研究数据表 ;
ktyjtjs = 课题研究统计数 ;
zpjx = 作品奖项 ;
gzzyxxy = 工作站优秀学员 ;
*/
let config = {"xklsfbzb":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"gzzfbt":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"2023xnsxqxbqk":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"xklssj":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"kczysj":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"xzskczy":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"tskt":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"cxsjgzzsj":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"gzzfb":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"ggzzxssl":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"rcgl":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"xskqs":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"ktyjsjb":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"ktyjtjs":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"zpjx":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"gzzyxxy":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}}};
let interfaceData = Object.assign({}, qsnkjcxsjgzzData );
let changeData = changeDataProcess('青少年科技创新实践工作站', interfaceData, config);
//todo 剩下的就是将excel定好的数据和interface的数据关联起来了
}
import { changeListObjectToListByReflect, changeObjectKey, changeObjectToList, designativListKeyAddUnit, getDesignativByReflect } from "../../dataPackage/interfaceAnalysis";
import { BizError } from "../../util/bizError";
import { getInterfaceByInterfaceName } from "./cronJob";
function changeDataProcess(interfaceName, interfaceData, config) {
let result = {};
for (let dataName in config) {
let { type, operationsType, reflect, unitInfo } = config[dataName];
let fileData = interfaceData[dataName];
let fileType = typeof fileData;
let dataIsArray = Array.isArray(fileData);
if ( (type == "array" && !dataIsArray) || (type == "object" && dataIsArray) ||
(type == "object" && fileType != "object") || (type != "array" && fileType != type) ) {
throw new BizError(`接口 ${interfaceName}中的${dataName}类型错误应该为 ${type} 现在为${fileType}`);
}
let onceData;
switch (operationsType) {
case "object_ToList": onceData= changeObjectToList(fileData, reflect); break;
case "object_changeKey": onceData = changeObjectKey(fileData, reflect); break;
case "list_changeKey": onceData = changeListObjectToListByReflect(fileData, reflect); break;
}
if (unitInfo) onceData = designativListKeyAddUnit(onceData, unitInfo);
result[dataName] = onceData;
}
return result;
}
function ssk1InterfaceData() {
let ssk1interfaceName = "申生康1";
let ssk1Data:any = getInterfaceByInterfaceName(ssk1interfaceName);
/*
xsjqqkyyzb = 学生近期缺课原因占比 ;
jbqk(qs) = 基本情况(全市) ;
xbzb(xs|js) = 性别占比(学生|教师) ;
gqxssfb = 各区学生数分布 ;
gqjssfb = 各区教师数分布 ;
gqjgsfb = 各区机构数分布 ;
jqybqkrs = 近期因病缺课人数 ;
jyzsbqk = 近一周上报情况 ;
jqgfjbph = 近期高发疾病排行 ;
jrwsbxx = 今日未上报学校 ;
xsjqqkyyzb = 学生近期缺课原因占比 //. *缩写重复了 请检查;
xyjkzngl = 校园健康智能管理 ;
jjxmz = 聚集性苗子 ;
bfsjqkfx = 病发时间情况分析 ;
*/
let config = {"xsjqqkyyzb":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"jbqk_qs":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"xbzb_xs":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"gqxssfb":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"gqjssfb":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"gqjgsfb":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"jqybqkrs":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"jyzsbqk":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"jqgfjbph":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"jrwsbxx":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"xyjkzngl":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"jjxmz":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"bfsjqkfx":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}}};
let interfaceData = Object.assign({}, ssk1Data );
let changeData = changeDataProcess('申生康1', interfaceData, config);
//todo 剩下的就是将excel定好的数据和interface的数据关联起来了
}
import { changeListObjectToListByReflect, changeObjectKey, changeObjectToList, designativListKeyAddUnit, getDesignativByReflect } from "../../dataPackage/interfaceAnalysis";
import { BizError } from "../../util/bizError";
import { getInterfaceByInterfaceName } from "./cronJob";
function changeDataProcess(interfaceName, interfaceData, config) {
let result = {};
for (let dataName in config) {
let { type, operationsType, reflect, unitInfo } = config[dataName];
let fileData = interfaceData[dataName];
let fileType = typeof fileData;
let dataIsArray = Array.isArray(fileData);
if ( (type == "array" && !dataIsArray) || (type == "object" && dataIsArray) ||
(type == "object" && fileType != "object") || (type != "array" && fileType != type) ) {
throw new BizError(`接口 ${interfaceName}中的${dataName}类型错误应该为 ${type} 现在为${fileType}`);
}
let onceData;
switch (operationsType) {
case "object_ToList": onceData= changeObjectToList(fileData, reflect); break;
case "object_changeKey": onceData = changeObjectKey(fileData, reflect); break;
case "list_changeKey": onceData = changeListObjectToListByReflect(fileData, reflect); break;
}
if (unitInfo) onceData = designativListKeyAddUnit(onceData, unitInfo);
result[dataName] = onceData;
}
return result;
}
function ssk2InterfaceData() {
let ssk2interfaceName = "申生康2";
let ssk2Data:any = getInterfaceByInterfaceName(ssk2interfaceName);
/*
jqybqkyyzb = 近期因病缺课原因占比 ;
jbqk(qs) = 基本情况(全市) ;
xbzb(xs|js) = 性别占比(学生|教师) ;
gqxssfb = 各区学生数分布 ;
gqjssfb = 各区教师数分布 ;
gqjgsfb = 各区机构数分布 ;
jyzsbqk = 近一周上报情况 ;
jjxmz = 聚集性苗子 ;
jbmz = 疾病苗子 ;
jrwsbxx = 今日未上报学校 ;
xyjkzngl = 校园健康智能管理 ;
zzmz = 症状苗子 ;
jqybqkrs = 近期因病缺课人数 ;
jqgfjbph = 近期高发疾病排行 ;
bfsjqkfx = 病发时间情况分析 ;
*/
let config = {"jqybqkyyzb":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"jbqk(qs)":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"xbzb(xs|js)":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"gqxssfb":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"gqjssfb":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"gqjgsfb":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"jyzsbqk":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"jjxmz":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"jbmz":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"jrwsbxx":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"xyjkzngl":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"zzmz":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"jqybqkrs":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"jqgfjbph":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"bfsjqkfx":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}}};
let interfaceData = Object.assign({}, ssk2Data );
let changeData = changeDataProcess('申生康2', interfaceData, config);
//todo 剩下的就是将excel定好的数据和interface的数据关联起来了
}
import { changeListObjectToListByReflect, changeObjectKey, changeObjectToList, designativListKeyAddUnit, getDesignativByReflect } from "../../dataPackage/interfaceAnalysis";
import { BizError } from "../../util/bizError";
import { getInterfaceByInterfaceName } from "./cronJob";
function changeDataProcess(interfaceName, interfaceData, config) {
let result = {};
for (let dataName in config) {
let { type, operationsType, reflect, unitInfo } = config[dataName];
let fileData = interfaceData[dataName];
let fileType = typeof fileData;
let dataIsArray = Array.isArray(fileData);
if ( (type == "array" && !dataIsArray) || (type == "object" && dataIsArray) ||
(type == "object" && fileType != "object") || (type != "array" && fileType != type) ) {
throw new BizError(`接口 ${interfaceName}中的${dataName}类型错误应该为 ${type} 现在为${fileType}`);
}
let onceData;
switch (operationsType) {
case "object_ToList": onceData= changeObjectToList(fileData, reflect); break;
case "object_changeKey": onceData = changeObjectKey(fileData, reflect); break;
case "list_changeKey": onceData = changeListObjectToListByReflect(fileData, reflect); break;
}
if (unitInfo) onceData = designativListKeyAddUnit(onceData, unitInfo);
result[dataName] = onceData;
}
return result;
}
function ssk3InterfaceData() {
let ssk3interfaceName = "申生康3";
let ssk3Data:any = getInterfaceByInterfaceName(ssk3interfaceName);
/*
jqybqkyyfx = 近期因病缺课原因分析 ;
jbqk(qs) = 基本情况(全市) ;
xbzb(xs|js) = 性别占比(学生|教师) ;
gqxssfb = 各区学生数分布 ;
gqjssfb = 各区教师数分布 ;
gqjgsfb = 各区机构数分布 ;
jyzsbqk = 近一周上报情况 ;
jjxmz = 聚集性苗子 ;
jbmz = 疾病苗子 ;
zzmz = 症状苗子 ;
jqybqkrs = 近期因病缺课人数 ;
jqgfjbph = 近期高发疾病排行 ;
jrwsbxx = 今日未上报学校 ;
xyjkzngl = 校园健康智能管理 ;
bfsjqkfx = 病发时间情况分析 ;
*/
let config = {"jqybqkyyfx":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"jbqk(qs)":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"xbzb(xs|js)":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"gqxssfb":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"gqjssfb":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"gqjgsfb":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"jyzsbqk":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"jjxmz":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"jbmz":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"zzmz":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"jqybqkrs":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"jqgfjbph":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"jrwsbxx":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"xyjkzngl":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"bfsjqkfx":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}}};
let interfaceData = Object.assign({}, ssk3Data );
let changeData = changeDataProcess('申生康3', interfaceData, config);
//todo 剩下的就是将excel定好的数据和interface的数据关联起来了
}
import { changeListObjectToListByReflect, changeObjectKey, changeObjectToList, designativListKeyAddUnit, getDesignativByReflect } from "../../dataPackage/interfaceAnalysis";
import { BizError } from "../../util/bizError";
import { getInterfaceByInterfaceName } from "./cronJob";
function changeDataProcess(interfaceName, interfaceData, config) {
let result = {};
for (let dataName in config) {
let { type, operationsType, reflect, unitInfo } = config[dataName];
let fileData = interfaceData[dataName];
let fileType = typeof fileData;
let dataIsArray = Array.isArray(fileData);
if ( (type == "array" && !dataIsArray) || (type == "object" && dataIsArray) ||
(type == "object" && fileType != "object") || (type != "array" && fileType != type) ) {
throw new BizError(`接口 ${interfaceName}中的${dataName}类型错误应该为 ${type} 现在为${fileType}`);
}
let onceData;
switch (operationsType) {
case "object_ToList": onceData= changeObjectToList(fileData, reflect); break;
case "object_changeKey": onceData = changeObjectKey(fileData, reflect); break;
case "list_changeKey": onceData = changeListObjectToListByReflect(fileData, reflect); break;
}
if (unitInfo) onceData = designativListKeyAddUnit(onceData, unitInfo);
result[dataName] = onceData;
}
return result;
}
function ysysdaInterfaceData() {
let ysysdainterfaceName = "一生一世档案";
let ysysdaData:any = getInterfaceByInterfaceName(ysysdainterfaceName);
/*
xxfffx = 学习方法分析 ;
kqfx = 考情分析 ;
tcyyfx = 退出原因分析 ;
yynrhz = 原因内容汇总 ;
fkypg = 反馈与评估 ;
zpjx = 作品奖项 ;
yxxsxxb = 优秀学生信息表 ;
gzxxb = 工作信息表 ;
jdgx = 阶段感想 ;
sjktyjjd = 市级课题研究进度 ;
hjlb = 获奖列表 ;
*/
let config = {"xxfffx":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"kqfx":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"tcyyfx":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"yynrhz":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"fkypg":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"zpjx":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"yxxsxxb":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"gzxxb":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"jdgx":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"sjktyjjd":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"hjlb":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}}};
let interfaceData = Object.assign({}, ysysdaData );
let changeData = changeDataProcess('一生一世档案', interfaceData, config);
//todo 剩下的就是将excel定好的数据和interface的数据关联起来了
}
import { changeListObjectToListByReflect, changeObjectKey, changeObjectToList, designativListKeyAddUnit, getDesignativByReflect } from "../../dataPackage/interfaceAnalysis";
import { BizError } from "../../util/bizError";
import { getInterfaceByInterfaceName } from "./cronJob";
function changeDataProcess(interfaceName, interfaceData, config) {
let result = {};
for (let dataName in config) {
let { type, operationsType, reflect, unitInfo } = config[dataName];
let fileData = interfaceData[dataName];
let fileType = typeof fileData;
let dataIsArray = Array.isArray(fileData);
if ( (type == "array" && !dataIsArray) || (type == "object" && dataIsArray) ||
(type == "object" && fileType != "object") || (type != "array" && fileType != type) ) {
throw new BizError(`接口 ${interfaceName}中的${dataName}类型错误应该为 ${type} 现在为${fileType}`);
}
let onceData;
switch (operationsType) {
case "object_ToList": onceData= changeObjectToList(fileData, reflect); break;
case "object_changeKey": onceData = changeObjectKey(fileData, reflect); break;
case "list_changeKey": onceData = changeListObjectToListByReflect(fileData, reflect); break;
}
if (unitInfo) onceData = designativListKeyAddUnit(onceData, unitInfo);
result[dataName] = onceData;
}
return result;
}
function zyhdbzInterfaceData() {
let zyhdbzinterfaceName = "重要活动保障";
let zyhdbzData:any = getInterfaceByInterfaceName(zyhdbzinterfaceName);
/*
kphd-zgkpbl = 科普活动-中国科普博览 ;
qsnrgznalpktzs = 青少年人工智能奥林匹克挑战赛 ;
csdnhd-kfzhddby = CSDN活动-开发者活动大本营 ;
yzzykyrjfh = 亚洲自由开源软件峰会 ;
mbazkbk = MBA智库百科 ;
kphd-zgkpbl = 科普活动-中国科普博览 //. *缩写重复了 请检查;
dhl = 导航栏 ;
hdzt = 活动状态 ;
*/
let config = {"kphd-zgkpbl":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"qsnrgznalpktzs":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"csdnhd-kfzhddby":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"yzzykyrjfh":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"mbazkbk":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"dhl":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"hdzt":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}}};
let interfaceData = Object.assign({}, zyhdbzData );
let changeData = changeDataProcess('重要活动保障', interfaceData, config);
//todo 剩下的就是将excel定好的数据和interface的数据关联起来了
}
import { changeListObjectToListByReflect, changeObjectKey, changeObjectToList, designativListKeyAddUnit, getDesignativByReflect } from "../../dataPackage/interfaceAnalysis";
import { BizError } from "../../util/bizError";
import { getInterfaceByInterfaceName } from "./cronJob";
function changeDataProcess(interfaceName, interfaceData, config) {
let result = {};
for (let dataName in config) {
let { type, operationsType, reflect, unitInfo } = config[dataName];
let fileData = interfaceData[dataName];
let fileType = typeof fileData;
let dataIsArray = Array.isArray(fileData);
if ( (type == "array" && !dataIsArray) || (type == "object" && dataIsArray) ||
(type == "object" && fileType != "object") || (type != "array" && fileType != type) ) {
throw new BizError(`接口 ${interfaceName}中的${dataName}类型错误应该为 ${type} 现在为${fileType}`);
}
let onceData;
switch (operationsType) {
case "object_ToList": onceData= changeObjectToList(fileData, reflect); break;
case "object_changeKey": onceData = changeObjectKey(fileData, reflect); break;
case "list_changeKey": onceData = changeListObjectToListByReflect(fileData, reflect); break;
}
if (unitInfo) onceData = designativListKeyAddUnit(onceData, unitInfo);
result[dataName] = onceData;
}
return result;
}
function zzb_100znbInterfaceData() {
let zzb_100znbinterfaceName = "周周播(100周年版)";
let zzb_100znbData:any = getInterfaceByInterfaceName(zzb_100znbinterfaceName);
/*
kclyqk = 课程来源情况 ;
kcsynjd = 课程适用年级段 ;
kclyfb = 课程领域分布 ;
kcsfx = 课程数分析 ;
sslfx = 搜索栏分析 ;
kcxx = 课程信息 ;
kcfksj = 课程反馈数据 ;
kcbfqk = 课程播放情况 ;
rmkcphtop10(bz) = 热门课程排行top10(本周) ;
rmbq = 热门标签 ;
kcfk = 课程反馈 ;
zxgykcpf = 在线公益课程评分 ;
*/
let config = {"kclyqk":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"kcsynjd":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"kclyfb":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"kcsfx":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"sslfx":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"kcxx":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"kcfksj":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"kcbfqk":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"rmkcphtop10(bz)":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"rmbq":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"kcfk":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"zxgykcpf":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}}};
let interfaceData = Object.assign({}, zzb_100znbData );
let changeData = changeDataProcess('周周播_100周年版', interfaceData, config);
//todo 剩下的就是将excel定好的数据和interface的数据关联起来了
}
import { changeListObjectToListByReflect, changeObjectKey, changeObjectToList, designativListKeyAddUnit, getDesignativByReflect } from "../../dataPackage/interfaceAnalysis";
import { BizError } from "../../util/bizError";
import { getInterfaceByInterfaceName } from "./cronJob";
function changeDataProcess(interfaceName, interfaceData, config) {
let result = {};
for (let dataName in config) {
let { type, operationsType, reflect, unitInfo } = config[dataName];
let fileData = interfaceData[dataName];
let fileType = typeof fileData;
let dataIsArray = Array.isArray(fileData);
if ( (type == "array" && !dataIsArray) || (type == "object" && dataIsArray) ||
(type == "object" && fileType != "object") || (type != "array" && fileType != type) ) {
throw new BizError(`接口 ${interfaceName}中的${dataName}类型错误应该为 ${type} 现在为${fileType}`);
}
let onceData;
switch (operationsType) {
case "object_ToList": onceData= changeObjectToList(fileData, reflect); break;
case "object_changeKey": onceData = changeObjectKey(fileData, reflect); break;
case "list_changeKey": onceData = changeListObjectToListByReflect(fileData, reflect); break;
}
if (unitInfo) onceData = designativListKeyAddUnit(onceData, unitInfo);
result[dataName] = onceData;
}
return result;
}
function zzb_rcbInterfaceData() {
let zzb_rcbinterfaceName = "周周播(日程版)";
let zzb_rcbData:any = getInterfaceByInterfaceName(zzb_rcbinterfaceName);
/*
kclyqk = 课程来源情况 ;
kcsynjd = 课程适用年级段 ;
kclyfb = 课程领域分布 ;
kcsfx = 课程数分析 ;
sslfx = 搜索栏分析 ;
kcxx = 课程信息 ;
kcfksj = 课程反馈数据 ;
kcbfqk = 课程播放情况 ;
rmkcphtop10(bz) = 热门课程排行top10(本周) ;
rmbq = 热门标签 ;
kcfk = 课程反馈 ;
zxgykcpf = 在线公益课程评分 ;
*/
let config = {"kclyqk":{"type":"array","operationsType":"list_changeKey","reflect":"","unitInfo":{}},"kcsynjd":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"kclyfb":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"kcsfx":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"sslfx":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"kcxx":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"kcfksj":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"kcbfqk":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"rmkcphtop10(bz)":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"rmbq":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"kcfk":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}},"zxgykcpf":{"type":"object","operationsType":"object_ToList","reflect":"","unitInfo":{}}};
let interfaceData = Object.assign({}, zzb_rcbData );
let changeData = changeDataProcess('周周播(日程版)', interfaceData, config);
//todo 剩下的就是将excel定好的数据和interface的数据关联起来了
}
import { planarArrDecollateForIndex, planarArrDeconstruct, planarArrForObjectList } from "../../dataPackage/planaryArrayAnalysis";
import { onceSheetBecomeOfblockData } 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 gzzTableData() {
let blockDataList = onceSheetBecomeOfblockData('kyszhglpt.xlsx', '青少年科技创新实践工作站');
let keyValueOrTitleList = ["学科老师分布","工作站类型分布","历年工作站类型分布","选拔情况","课程资源","培训活动","新增课程资源数","新增培训活动数","课程资源类型数","培训活动类型数","课程资源特色课题","培训活动特色课题","工作站分布键值","历年工作站分布键值","日常管理","学生考勤分析","课题研究","优秀学员","顶部","各工作站学生数量"];//适配 饼图 键值以及需要多个key的
let barChartList = ["历年招募学员情况","学生来源分布","课程历年资源数","培训历年资源数","各工作站学生数量分析","日常管理趋势","专业匹配率分析"]; //适配 柱状图 折线图
let stringList = [];
let decollatePlanarList =["作品奖项","课题研究列表"];//适配 表格
let titltListConfig = {};
let result = packageDataProcess(blockDataList, titltListConfig, keyValueOrTitleList, barChartList, stringList, decollatePlanarList);
return result;
}
\ No newline at end of file
import { planarArrDecollateForIndex, planarArrDeconstruct, planarArrForObjectList } from "../../dataPackage/planaryArrayAnalysis";
import { onceSheetBecomeOfblockData } 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 jyyzzyTableData() {
let blockDataList = onceSheetBecomeOfblockData('kyszhglpt.xlsx', '教育优质资源');
let keyValueOrTitleList = ["申报单位结构","课程来源情况","一审课程分类","二审课程分类","三审课程分类","一审课程领域","二审课程领域","三审课程领域","课程类别","优质资源汇总",
"优质课程TOP榜","专项品牌资源","理事单位","课程实施成果","入库资源优势数据",
];//适配 饼图 键值以及需要多个key的
let barChartList = ["入库资源优势"]; //适配 柱状图 折线图
let stringList = [];
let decollatePlanarList =["课程评审质量把控"];//适配 表格
let titltListConfig = {};
let result = packageDataProcess(blockDataList, titltListConfig, keyValueOrTitleList, barChartList, stringList, decollatePlanarList);
return result;
}
export function kcsjTableData(sheetName) {
let blockDataList = onceSheetBecomeOfblockData('kyszhglpt.xlsx', `${sheetName}`);
let keyValueOrTitleList = ["课程基础数据", "课程类型数据", "课程类型饼图", "课程评价/反馈", "课程评价等级"];//适配 饼图 键值以及需要多个key的
let barChartList = ["课程观看趋势", "各学段观看分析"]; //适配 柱状图 折线图
let stringList = [];
let decollatePlanarList =[""];//适配 表格
let titltListConfig = {};
let result = packageDataProcess(blockDataList, titltListConfig, keyValueOrTitleList, barChartList, stringList, decollatePlanarList);
return result;
}
\ No newline at end of file
import { planarArrDecollateForIndex, planarArrDeconstruct, planarArrForObjectList } from "../../dataPackage/planaryArrayAnalysis";
import { onceSheetBecomeOfblockData } 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 kxyjyTableData() {
let blockDataList = onceSheetBecomeOfblockData('kyszhglpt.xlsx', '科学研究院');
let keyValueOrTitleList = ["学段分布","培养模式","课题类型分布","申报人数","名师资源","各区学生考勤分析","课题研究","研究成果","顶部","学生性别分布"];//适配 饼图 键值以及需要多个key的
let barChartList = ["各区招收情况","学生区域分布","各区学生考勤分析趋势","各区学生课题数量","跟踪培育","活参加活动"]; //适配 柱状图 折线图
let stringList = [];
let decollatePlanarList =["优秀学生风采录","课题研究图片"];//适配 表格
let titltListConfig = {};
let result = packageDataProcess(blockDataList, titltListConfig, keyValueOrTitleList, barChartList, stringList, decollatePlanarList);
return result;
}
\ No newline at end of file
import { planarArrDecollateForIndex, planarArrDeconstruct, planarArrForObjectList } from "../../dataPackage/planaryArrayAnalysis";
import { onceSheetBecomeOfblockData } 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 qsnkjcxsjgzzTableData() {
let blockDataList = onceSheetBecomeOfblockData('kyszhglpt.xlsx', '青少年科技创新实践工作站');
let keyValueOrTitleList = ["学科老师分布占比","工作站分布图","2023学年上学期选拔情况","学科老师数据","课程资源数据","新增设课程资源","特色课题","查询时间工作站数据","工作站分布","各工作站学生数量","日常管理","学生考勤数","课题研究统计数","作品奖项","工作站优秀学员"];//适配 饼图 键值以及需要多个key的
let barChartList = ["历年招募学员情况","历年资源数量","工作站类型图","学生考勤分析图","专业匹配率"]; //适配 柱状图 折线图
let stringList = [];
let decollatePlanarList =["课题研究数据表"];//适配 表格
let titltListConfig = {};
let result = packageDataProcess(blockDataList, titltListConfig, keyValueOrTitleList, barChartList, stringList, decollatePlanarList);
return result;
}
\ No newline at end of file
import { planarArrDecollateForIndex, planarArrDeconstruct, planarArrForObjectList } from "../../dataPackage/planaryArrayAnalysis";
import { onceSheetBecomeOfblockData } 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 ssk1TableData() {
let blockDataList = onceSheetBecomeOfblockData('kyszhglpt.xlsx', '申生康1');
let keyValueOrTitleList = ["近一周上报率","基本情况_全市","性别占比_学生","性别占比_老师","各区学生数分布","各区教师数分布",
"各区机构数分布","学生近期因病缺课人数","教职工近期因病缺课人数","近一周上报情况","近期高发疾病排行","托幼病发时间情况分析","今日未上报学校",
"小学病发时间情况分析","初中病发时间情况分析","高中病发时间情况分析","大学病发时间情况分析"];//适配 饼图 键值以及需要多个key的
let barChartList = ["百日咳高发疾病趋势","急性上呼吸道感染高发疾病趋势","肠胃炎高发疾病趋势","肺炎高发疾病趋势","学段人数分析","学生近期缺课原因占比","教职工近期缺课原因占比",
"病症人数分析"]; //适配 柱状图 折线图
let stringList = [];
let decollatePlanarList =["因病缺课趋势_月","因病缺课趋势_年","因病缺课趋势_周","校园健康智能管理"];//适配 表格
let titltListConfig = {};
let result = packageDataProcess(blockDataList, titltListConfig, keyValueOrTitleList, barChartList, stringList, decollatePlanarList);
return result;
}
\ No newline at end of file
import { planarArrDecollateForIndex, planarArrDeconstruct, planarArrForObjectList } from "../../dataPackage/planaryArrayAnalysis";
import { onceSheetBecomeOfblockData } 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 ssk2TableData() {
let blockDataList = onceSheetBecomeOfblockData('kyszhglpt.xlsx', '申生康2');
let keyValueOrTitleList = ["近期因病缺课原因占比","基本情况(全市)","性别占比(学生|教师)","各区学生数分布","各区教师数分布","各区机构数分布","近一周上报情况","聚集性苗子","疾病苗子","症状苗子","近期因病缺课人数","近期高发疾病排行"];//适配 饼图 键值以及需要多个key的
let barChartList = ["学段人数分析","近一周上报情况","因病缺课(月)","高发疾病趋势(百日咳)","病症人数分布"]; //适配 柱状图 折线图
let stringList = [];
let decollatePlanarList =["今日未上报学校","校园健康智能管理","病发时间情况分析"];//适配 表格
let titltListConfig = {};
let result = packageDataProcess(blockDataList, titltListConfig, keyValueOrTitleList, barChartList, stringList, decollatePlanarList);
return result;
}
\ No newline at end of file
import { planarArrDecollateForIndex, planarArrDeconstruct, planarArrForObjectList } from "../../dataPackage/planaryArrayAnalysis";
import { onceSheetBecomeOfblockData } 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 ssk3TableData() {
let blockDataList = onceSheetBecomeOfblockData('kyszhglpt.xlsx', '申生康3');
let keyValueOrTitleList = ["近期因病缺课原因分析","基本情况(全市)","性别占比(学生|教师)","各区学生数分布","各区教师数分布","各区机构数分布","近一周上报情况","聚集性苗子","疾病苗子","症状苗子","近期因病缺课人数","近期高发疾病排行"];//适配 饼图 键值以及需要多个key的
let barChartList = ["学段人数分析","近一周上报情况","因病缺课趋势","高发疾病趋势","病症人数分布"]; //适配 柱状图 折线图
let stringList = [];
let decollatePlanarList =["今日未上报学校","校园健康智能管理","病发时间情况分析"];//适配 表格
let titltListConfig = {};
let result = packageDataProcess(blockDataList, titltListConfig, keyValueOrTitleList, barChartList, stringList, decollatePlanarList);
return result;
}
\ No newline at end of file
import { planarArrDecollateForIndex, planarArrDeconstruct, planarArrForObjectList } from "../../dataPackage/planaryArrayAnalysis";
import { onceSheetBecomeOfblockData } 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 ysysdaTableData() {
let blockDataList = onceSheetBecomeOfblockData('kyszhglpt.xlsx', '一生一世档案');
let keyValueOrTitleList = ["优秀学生信息表", "工作信息表","阶段感想", "学习方法分析","考情分析","退出原因分析","作品奖项"];//适配 饼图 键值以及需要多个key的
let barChartList = ["原因内容汇总", "反馈与评估"]; //适配 柱状图 折线图
let stringList = [];
let decollatePlanarList =["市级课题研究进度", "课题研究进度","获奖列表"];//适配 表格
let titltListConfig = {};
let result = packageDataProcess(blockDataList, titltListConfig, keyValueOrTitleList, barChartList, stringList, decollatePlanarList);
return result;
}
\ No newline at end of file
import { planarArrDecollateForIndex, planarArrDeconstruct, planarArrForObjectList } from "../../dataPackage/planaryArrayAnalysis";
import { onceSheetBecomeOfblockData } 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 zyhdbzTableData() {
let blockDataList = onceSheetBecomeOfblockData('kyszhglpt.xlsx', '重要活动保障');
let keyValueOrTitleList = ["科普活动-中国科普博览","青少年人工智能奥林匹克挑战赛","CSDN活动-开发者活动大本营","亚洲自由开源软件峰会","MBA智库百科","科普活动-中国科普博览","导航栏","活动状态"];//适配 饼图 键值以及需要多个key的
let barChartList = ["访问流量趋势","访问流量趋势","访问流量趋势","访问流量趋势","访问流量趋势","访问流量趋势"]; //适配 柱状图 折线图
let stringList = [];
let decollatePlanarList =[];//适配 表格
let titltListConfig = {};
let result = packageDataProcess(blockDataList, titltListConfig, keyValueOrTitleList, barChartList, stringList, decollatePlanarList);
return result;
}
\ No newline at end of file
import { planarArrDecollateForIndex, planarArrDeconstruct, planarArrForObjectList } from "../../dataPackage/planaryArrayAnalysis";
import { onceSheetBecomeOfblockData } 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 zzbznbTableData() {
let blockDataList = onceSheetBecomeOfblockData('kyszhglpt.xlsx', '周周播_100周年版');
let keyValueOrTitleList = ["课程来源情况","课程适用年级段","课程领域分布","课程数分析","搜索栏分析","课程信息","课程反馈数据","课程播放情况","热门课程排行top10(本周)","热门标签","课程反馈","在线公益课程评分"];//适配 饼图 键值以及需要多个key的
let barChartList = ["课程类别(艺术)","ESCSA课程投放平台","中国电信课程投放平台","东方网教育课程投放平台","bilibili课程投放平台","课程观看趋势(本周)","平台播放量趋势","课程收藏/转发量","课程类型热度排行"]; //适配 柱状图 折线图
let stringList = [];
let decollatePlanarList =[];//适配 表格
let titltListConfig = {};
let result = packageDataProcess(blockDataList, titltListConfig, keyValueOrTitleList, barChartList, stringList, decollatePlanarList);
return result;
}
\ No newline at end of file
import { planarArrDecollateForIndex, planarArrDeconstruct, planarArrForObjectList } from "../../dataPackage/planaryArrayAnalysis";
import { onceSheetBecomeOfblockData } 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 zzbrcbTableData() {
let blockDataList = onceSheetBecomeOfblockData('kyszhglpt.xlsx', '周周播_日程版');
let keyValueOrTitleList = ["课程类别_艺术","ESCSA课程投放平台","课程来源情况","课程适用年级段","课程领域分布","课程数分析","搜索栏分析","课程信息","课程反馈数据","课程播放情况","热门课程排行top10_本周",
"热门标签","课程反馈","在线公益课程评分"];//适配 饼图 键值以及需要多个key的
let barChartList = ["中国电信课程投放平台","东方网教育课程投放平台","bilibili课程投放平台",
"9月平台播放量趋势","课程收藏/转发量"]; //适配 柱状图 折线图
let stringList = [];
let decollatePlanarList =[];//适配 表格
let titltListConfig = {};
let result = packageDataProcess(blockDataList, titltListConfig, keyValueOrTitleList, barChartList, stringList, decollatePlanarList);
return result;
}
\ No newline at end of file
//打包完数据之后的处理
/**
* 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;
}
/**
* 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 += 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:typeChangeValue, unit});
});
return {title, total, 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 { initInterfaceData } from "./data/interface/cronJob";
import { httpServer } from "./net/http_server";
import { initConfig, systemConfig } from "./config/serverConfig";
async function lanuch() {
test();
await initConfig();
// initInterfaceData();
httpServer.createServer( systemConfig.port );
console.log('This indicates that the server is started successfully.');
}
function test() {
}
lanuch();
export async function checkToken(req, res, next) {
next();
}
\ No newline at end of file
export async function encryptionReturn(req, res, next) {
res.on('end', function(){
console.log(res.body);
});
let resSend = res.send;
res.send = (obj)=>{
changeNumber(obj);
//递归修改number型
resSend.call(res, obj);
};
next();
}
function changeNumber(obj) {
if (Array.isArray(obj)) {
for (let i = 0; i < obj.length; i++) {
let arrItem = obj[i];
if (typeof arrItem == "number") {
obj[i] = getSameLenNumber(arrItem);
}
else if (typeof arrItem == "object") {
changeNumber(arrItem);
}
}
}
else {
for (let key in obj) {
let objItem = obj[key];
if (typeof objItem == "number") {
if (key == "x" || key == "y") continue;
obj[key] = getSameLenNumber(objItem);
}
else if (typeof objItem == "object") {
changeNumber(objItem);
}
}
}
}
function getSameLenNumber(num) {
let numStr = String(num);
//疑似年份的不做加密
if (numStr.length == 4 && (numStr.indexOf("19") == 0 || numStr.indexOf("20") == 0)) return num;
let str = "";
for (let i = 0; i < numStr.length; i++) {
if (numStr[i] == '.') str += numStr[i];
else str += "6";
}
return Number(str);
}
\ No newline at end of file
var formidable = require("formidable");
export async function parseFormParam(req, res, next) {
    var form = new formidable.IncomingForm();
    form.parse(req, (err, fields, files)=>{
        if (err) {
           next(err)
        }
        else {
            req.fields = fields;
            req.files = files;
            next();
        }
    })
}
\ No newline at end of file
import express = require('express');
import bodyParser = require('body-parser');
import sign = require('../middleware/sign');
import routers = require('../routers/router');
import compression = require('compression');
import * as fallback from 'express-history-api-fallback';
import * as path from "path";
export class httpServer {
static createServer(port:number) {
var httpServer = express();
httpServer.all('*',function (req, res, next) {
res.header('Access-Control-Allow-Origin', req.headers.origin);
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header('Access-Control-Allow-Headers', 'token,Content-Type');
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header('Access-Control-Allow-Credentials', true);
res.header("X-Powered-By", ' 3.2.1');
if(req.method === 'OPTIONS'){
res.statusCode = 200;
res.end();
}else{
next();
}
});
httpServer.use(express.static('public') );
httpServer.use(bodyParser.json({limit:"10kb"}));
httpServer.use(compression())
routers.setRouter(httpServer);
const root = path.join(__dirname, "../../public/")
httpServer.use(express.static(root))
httpServer.use(fallback('index.html', { root }))
console.log('web listen on port:'+port);
httpServer.listen(port);
console.log('server listen on port:'+port);
return httpServer;
}
}
import * as asyncHandler from 'express-async-handler'
import * as zzb_rcbBiz from '../biz/zzb_rcb';
import * as zzb_100znbBiz from '../biz/zzb_100znb';
import * as qsnkjcxsjgzzBiz from '../biz/qsnkjcxsjgzz';
import * as ysysdaBiz from '../biz/ysysda';
import * as zyhdbzBiz from '../biz/zyhdbz';
import * as jyyzzyBiz from '../biz/jyyzzy';
import * as kxyjyBiz from '../biz/kxyjy';
import * as ssk1Biz from '../biz/ssk1';
import * as ssk2Biz from '../biz/ssk2';
import * as ssk3Biz from '../biz/ssk3';
export function setRouter(httpServer){
//======post
//周周播 success
httpServer.post('/zzb_rcb', asyncHandler(zzb_rcbBiz.getData));
httpServer.post('/zzb_100znb', asyncHandler(zzb_100znbBiz.getData));
httpServer.get('/zzb_rcb', asyncHandler(zzb_rcbBiz.getData));
httpServer.get('/zzb_100znb', asyncHandler(zzb_100znbBiz.getData));
//实践工作站 success
httpServer.post('/qsnkjcxsjgzz', asyncHandler(qsnkjcxsjgzzBiz.getData));
httpServer.get('/qsnkjcxsjgzz', asyncHandler(qsnkjcxsjgzzBiz.getData));
//一生一档案 success
httpServer.post('/ysysda', asyncHandler(ysysdaBiz.getData));
httpServer.get('/ysysda', asyncHandler(ysysdaBiz.getData));
//重要活动保障 error
httpServer.post('/zyhdbz', asyncHandler(zyhdbzBiz.getData));
httpServer.get('/zyhdbz', asyncHandler(zyhdbzBiz.getData));
//教育优质资源 success
httpServer.post('/jyyzzy', asyncHandler(jyyzzyBiz.getData));
httpServer.get('/jyyzzy', asyncHandler(jyyzzyBiz.getData));
//教育优质资源右侧内容 error
httpServer.post('/jyyzzy/kcsj', asyncHandler(jyyzzyBiz.getKcsj));
httpServer.get('/jyyzzy/kcsj', asyncHandler(jyyzzyBiz.getKcsj));
//科学研究院 success
httpServer.post('/kxyjy', asyncHandler(kxyjyBiz.getData));//弃用
httpServer.get('/kxyjy', asyncHandler(kxyjyBiz.getData));//弃用
//申申康 error
httpServer.post('/ssk', asyncHandler(ssk1Biz.getData));
httpServer.get('/ssk', asyncHandler(ssk1Biz.getData));
//申申康右边列表 success
httpServer.post('/ssk/jrsbxx', asyncHandler(ssk1Biz.getJrsbxx));
httpServer.get('/ssk/jrsbxx', asyncHandler(ssk1Biz.getJrsbxx));
//申申康 名称 success
httpServer.post('/ssk/cityname', asyncHandler(ssk1Biz.getCityName));
httpServer.get('/ssk/cityname', asyncHandler(ssk1Biz.getCityName));
httpServer.post('/ssk/map', asyncHandler(ssk1Biz.getMap));
httpServer.get('/ssk/map', asyncHandler(ssk1Biz.getMap));
// httpServer.post('/ssk2', asyncHandler(ssk2Biz.getData));
// httpServer.get('/ssk2', asyncHandler(ssk2Biz.getData));
// httpServer.post('/ssk3', asyncHandler(ssk3Biz.getData));
// httpServer.get('/ssk3', asyncHandler(ssk3Biz.getData));
}
\ No newline at end of file
const xlsx = require('node-xlsx');
const path = require('path');
/**
* onceSheetBecomeOfblockData 将excel文件的指定sheet解析成数据块数据
* @param fileName 文件名称
* @param sheetName 表名称
* @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;
}
/**
* planaryArrayBecomeOfBlockData 将符合excel规则的sheet二维数组转为 数据块
* @param dataList excel解出来的数据
* @returns thisBlockData 返回数据块集合 格式:blockList = [ {blockData:数据块(二维数组), blockTitle:"数据标题"}]
*/
export function planaryArrayBecomeOfBlockData(planaryArray) {
return getBlockData(planaryArray);;
}
//===
/**
* getBlockData 数据分块
* @param dataList 解析出来的excel二维数组
* @returns 返回数据块集合 格式:blockList = [ {blockData:数据块(二维数组), blockTitle:"数据标题"}]
*/
function getBlockData(dataList) {
let blockList = [];
for (let i = 0; i < 999; i++) {
let {blockData, blockTitle, notItem, delDataList} = checkBlock(dataList);
if (notItem) break;
dataList = delDataList;
if (blockTitle) blockList.push({blockData, blockTitle});
}
return blockList;
}
function getListFristNotNullItemIndex(list) { //获取起始坐标
if (!list.length) return null;
for (let i = 0; i < list.length; i++) {
if (list[i]) return i;
}
}
function getListFirstNullItemIndex(startX, list) { //获取第一个为空的坐标
if (!list.length) return null;
let checkItem = false;
let firstItemIndex = 0;
for (let i = startX; i <= list.length; i++) {
let item = list[i];
if (!checkItem && item) checkItem = true;
if (checkItem && !item) {
firstItemIndex = i;
break;
}
}
return firstItemIndex;
}
function listRegionIsNull(list, startX, endX) { //指定区间内数据是否未空
let isNull = true;
if ( !list.length ) return isNull;
for (let i = startX; i < endX; i++) {
let item = list[i];
if (item) {
isNull = false;
break;
}
}
return isNull;
}
function thisListNotItem(list) {
for (let i = 0; i < list.length; i++) {
if (list[i]) return false;
}
return true
}
function checkBlock(dataList) {
//纵向有效起始点
let startY = 0;
let startX = 0;
let isNotBlockTitle = false; //没有块标题
let isLook = false;
let endX = 0;//x轴最长结束下标 【包括下标】
let blockTitle = ''; //标题块名称
let notItem = true;
for (let i = 0; i < dataList.length; i++) {
let childList = dataList[i] || [];
if (!thisListNotItem(childList)) {
if ( !isLook ) {
let thisRoowStartX = getListFristNotNullItemIndex(childList);
let thisRoowLastItem = childList[thisRoowStartX + 1];
let LastList = dataList[i+1] || [];
// let lastRoowStartX = getListFristNotNullItemIndex(LastList);
let lastRoowHaveItem = LastList[thisRoowStartX];
if ( thisRoowLastItem || (LastList.length && lastRoowHaveItem) ) {
if (lastRoowHaveItem && thisRoowLastItem ) {
isNotBlockTitle = true; //不存在标题块
blockTitle = `${thisRoowStartX}_${i}`;
startY = i;
startX = thisRoowStartX;
}
else {
blockTitle = dataList[i][thisRoowStartX];
dataList[i][thisRoowStartX] = null;
if ( thisRoowLastItem ) { // 同行存在元素 标题在y轴上
startY = i;
startX = thisRoowStartX + 1;
} else { // 同行存在元素 标题在x轴上
startY = i + 1;
startX = thisRoowStartX;
}
}
isLook = true;
} else { //只有标题 无内容
console.log(dataList[i][thisRoowStartX]);
dataList[i][thisRoowStartX] = null;
}
} else {
//测量最大连续长度
let firstNullX = getListFirstNullItemIndex(startX, childList);
if (firstNullX) endX = Math.max(endX, firstNullX-1);
break;
}
notItem = false;
}
}
let endY = 0;//y轴连续下标 【包括下标】
let yInfoStart = false;
let yInfoEnd = false;
for (let y = startY; y < dataList.length; y++) {
//纵向找连续性
let thisRoow = dataList[y];
let regionIsNull = listRegionIsNull(thisRoow, startX, endX);
if (!regionIsNull) {
endY = y;
if (!yInfoStart) yInfoStart = true;
}
if (yInfoStart && regionIsNull) yInfoEnd = true;
if (yInfoEnd) break;
}
let blockData = [];
for (let y = startY; y <= endY; y++) {
let onceList = [];
for (let x = startX; x <= endX; x++) {
onceList.push(dataList[y][x]);
dataList[y][x] = null;
}
blockData.push(onceList);
}
return {blockData, blockTitle, delDataList:dataList,notItem};
}
//获取单个excel文件的数据
function getExcel(filePath) {
const workSheetsFromFile = xlsx.parse(filePath);
let sheetMap = {};
let sheetList = [];
for (let i = 0; i < workSheetsFromFile.length; i++) {
let sheetInfo = workSheetsFromFile[i];
sheetMap[sheetInfo.name] = sheetInfo.data;
sheetList.push(sheetInfo);
}
return {sheetMap, sheetList}
}
\ No newline at end of file
import { getBizMsg, getSysMsg } from "../config/errorEnum";
import { logError } from "./log";
export class BizError extends Error {
constructor(...msgs) {
let reqErrorMsg = '';
let logErrorMsg = '';
for (let i = 0; i <msgs.length; i++) {
if (!i) {
let msg = getBizMsg(msgs[i]);
reqErrorMsg = msg;
logErrorMsg = msg;
} else {
logErrorMsg += ` | ${msgs[i]} `;
}
}
logError(logErrorMsg);
super(reqErrorMsg);
}
}
export class SysError extends Error {
constructor(...msgs) {
let reqErrorMsg = '';
let logErrorMsg = '';
for (let i = 0; i <msgs.length; i++) {
if (!i) {
let msg= getSysMsg(msgs[i]);
reqErrorMsg = msg;
logErrorMsg = msg;
} else {
if (typeof msgs[i] == 'object') logErrorMsg += ` | ${JSON.stringify(msgs[i])} `;
else logErrorMsg += ` | ${msgs[i]} `;
}
}
logError(logErrorMsg);
super(reqErrorMsg);
}
}
\ No newline at end of file
let log4js = require('log4js');
let path = require('path');
//log路径
export const systemLogPath = {
errorLogFile:"error",
errorLogDir:"error",
handleLogFile:"handle",
handleLogDir:"handle"
}
//日志根目录
let baseLogPath = path.resolve(__dirname.substring(0, __dirname.indexOf("out")), 'logs');
// let baseLogPath = path.resolve('./', 'logs');
let errFile = path.resolve(baseLogPath, systemLogPath.errorLogDir, systemLogPath.errorLogFile);
let handFile =path.resolve(baseLogPath, systemLogPath.handleLogDir, systemLogPath.handleLogFile);
let config = {
appenders:
{
"rule-console": {"type": "console"},
"errorLogger": {
"type": "dateFile", // 日志类型
"filename": errFile, // 输出文件名
"pattern": "-yyyy-MM-dd.log", // 后缀
"alwaysIncludePattern": true, // 上面两个参数是否合并
"encoding": "utf-8", // 编码格式
"maxLogSize": 1000, // 最大存储内容
"numBackups": 3, // 当文件内容超过文件存储空间时,备份文件的数量
"path": `/${systemLogPath.errorLogDir}`
},
"handleLogger": {
"type": "dateFile",
"filename": handFile,
"pattern": "-yyyy-MM-dd.log",
"alwaysIncludePattern": true,
"encoding": "utf-8",
"maxLogSize": 1000,
"numBackups": 3,
"path": `/${systemLogPath.handleLogDir}`
}
},
categories: {
"default": {"appenders": ["rule-console"], "level": "all"}, //这个配置一定要有
"errorLogger": {"appenders": ["errorLogger"], "level": "error"},
"handleLogger": {"appenders": ["handleLogger"], "level": "all"}
},
"baseLogPath": path.resolve(baseLogPath, systemLogPath.handleLogDir, systemLogPath.handleLogFile)
};
log4js.configure(config); //加载配置文件
//调用预先定义的日志名称
let errorLogger = log4js.getLogger("errorLogger");
let handleLogger = log4js.getLogger("handleLogger");
let consoleLogger = log4js.getLogger("rule-console");
//错误日志
export function logError(...errStrs) {
let str = "";
errStrs.forEach(item => {
str += item + " | ";
});
errorLogger.error(`errorInfo => ${str}`);
}
//普通日志
export function logHandle(msgStr:string) {
handleLogger.info(`logInfo => ${msgStr}`);
}
//输出日志
export function logConsole(logStr:string) {
consoleLogger.info(`logInfo => ${logStr}`);
}
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
import * as request from 'request';
import { BizError } from './bizError';
export function get(url:string, query?, headers?, timeOut?) {
timeOut = timeOut || 5000;
if (!url || (url.search(/http:/) && url.search(/https:/)) ) throw new BizError(!url ? "请求地址为空" : "请求地址错误");
return new Promise((resolve, reject)=>{
let paramater:any = { url, json:true, timeout:timeOut };
if (query) paramater.qs = query;
if (headers) paramater.headers = headers;
request.get(paramater, function (err, res, body) {
const success = !err && res && res == 200;
let message = err || res.statusCode || "";
resolve({success, message, body});
})
})
}
export function post(url, body, headers) {
if (!url || (url.search(/http:/) && url.search(/https:/)) ) throw new BizError(!url ? "请求地址为空" : "请求地址错误");
let header = {"content-type": "application/json"};
return new Promise((resolve, reject)=>{
request({
url: url,
method: "POST",
json: true,
headers: Object.assign(header, headers),
body: body
}, function(err, res, body) {
const success = !err && res && res == 200;
let message = err || res.statusCode || "";
resolve({success, message, body});
});
})
}
export function postForm(url, body) {
if (!url || (url.search(/http:/) && url.search(/https:/)) ) throw new BizError(!url ? "请求地址为空" : "请求地址错误");
return new Promise((resolve, reject)=>{
request({
url: url,
method: "POST",
json: true,
form:body
}, function(err, res, body) {
const success = !err && res && res == 200;
let message = err || res.statusCode || "";
resolve({success, message, body});
});
})
}
//对象判空
export function objectKeyIsNull(obj, ...keyNames) {
let isNull = false;
for (let i = 0; i < keyNames.length; i++) {
let keyStr = keyNames[i];
let moreKeyList = keyStr.split(".");
let lastObj;
for (let j = 0; j < moreKeyList.length; j++) {
lastObj = obj[moreKeyList[j]];
if (!lastObj) {
isNull = true;
break;
}
}
if (isNull) break;
}
return isNull;
}
{
"compilerOptions": {
"module": "commonjs",
"target": "es2017",
"sourceMap": true,
"rootDir":"./src",
"outDir":"./out"
},
"exclude": [
"node_modules"
]
}
\ 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