Commit adbb018c by chenjinjing

no message

parent 476f9d1a
import { info } from "console";
import { get选手详细分析 } from "../data/analysisData";
import { getChartData, objKeyReplace, getKeyValue, getSingleYAndMoreData, getListData, getMoreYChartData } from "../util/tools";
export function getData(req, res) {
let ret:any = {};
let excelData:any = get选手详细分析();
let 基础信息DataAndUnit = objKeyReplace(excelData.基础信息);
ret["api1"] = getKeyValue("基础信息", 基础信息DataAndUnit.dataMap, 基础信息DataAndUnit.unitMap, false, false );
let 技术特点评分DataAndUnit = objKeyReplace(excelData.技术特点评分);
ret["api2"] = getKeyValue("技术特点评分", 技术特点评分DataAndUnit.dataMap, 技术特点评分DataAndUnit.unitMap, false, false );
ret["api3"] = getListData("近期比赛概览", excelData.近期比赛概览, ["状态", "球员", "照片", "球员得分", "对手得分", "比赛日期", "对手照片", "对手姓名"], {"状态":"state", "球员":"selfName", "照片":"selfPic", "球员得分":"selfScore", "对手得分":"opponentScore", "比赛日期":"pkTime", "对手照片":"opponentPic", "对手姓名":"oppenentName"} );
let 比赛视频DataAndUnit = objKeyReplace(excelData.比赛视频);
ret["api4"] = getKeyValue("比赛视频", 比赛视频DataAndUnit.dataMap, 比赛视频DataAndUnit.unitMap, false, false );
ret["api5"] = getSingleYAndMoreData("左侧爆发能量", excelData.左侧爆发能量, false, false);
ret["api6"] = getSingleYAndMoreData("右侧爆发能量", excelData.右侧爆发能量, false, false);
ret["api7"] = getSingleYAndMoreData("左侧球移动速度", excelData.左侧球移动速度, false, false);
ret["api8"] = getSingleYAndMoreData("右侧球移动速度", excelData.右侧球移动速度, false, false);
let 攻击落点DataAndUnit = objKeyReplace(excelData.攻击落点);
ret["api9"] = getKeyValue("攻击落点", 攻击落点DataAndUnit.dataMap, 攻击落点DataAndUnit.unitMap, false, false );
let 防守落点DataAndUnit = objKeyReplace(excelData.防守落点);
ret["api10"] = getKeyValue("防守落点", 防守落点DataAndUnit.dataMap, 防守落点DataAndUnit.unitMap, false, false );
let 选手站位热力发布DataAndUnit = objKeyReplace(excelData.选手站位热力发布);
ret["api11"] = getKeyValue("选手站位热力发布", 选手站位热力发布DataAndUnit.dataMap, 选手站位热力发布DataAndUnit.unitMap, false, false );
}
import { get运动员概览 } from "../data/analysisData";
import { getChartData, objKeyReplace, getKeyValue, getSingleYAndMoreData, getListData } from "../util/tools";
export function getData(req, res) {
let ret:any = {};
let excelData:any = get运动员概览();
let 左上数据DataAndUnit = objKeyReplace(excelData.左上数据);
ret["api1"] = getKeyValue("左上数据", 左上数据DataAndUnit.dataMap, 左上数据DataAndUnit.unitMap, false, false );
let 运动员年龄分布DataAndUnit = objKeyReplace(excelData.运动员年龄分布);
ret["api2"] = getKeyValue("运动员年龄分布", 运动员年龄分布DataAndUnit.dataMap, 运动员年龄分布DataAndUnit.unitMap, false, false );
let 运动员性别占比DataAndUnit = objKeyReplace(excelData.运动员性别占比);
ret["api3"] = getKeyValue("运动员性别占比", 运动员性别占比DataAndUnit.dataMap, 运动员性别占比DataAndUnit.unitMap, false, false );
let 训练类型DataAndUnit = objKeyReplace(excelData.训练类型);
ret["api4"] = getKeyValue("训练类型", 训练类型DataAndUnit.dataMap, 训练类型DataAndUnit.unitMap, false, false );
let 动作模型练习DataAndUnit = objKeyReplace(excelData.动作模型练习);
ret["api5"] = getKeyValue("动作模型练习", 动作模型练习DataAndUnit.dataMap, 动作模型练习DataAndUnit.unitMap, false, false );
ret["api6"] = getSingleYAndMoreData("男女训练成绩对比", excelData.男女训练成绩对比, false, false );
ret["api7"] = getSingleYAndMoreData("月训练量趋势", excelData.月训练量趋势, false, false );
let 训练成绩优秀榜DataAndUnit = objKeyReplace(excelData.训练成绩优秀榜);
ret["api8"] = getKeyValue("训练成绩优秀榜", 训练成绩优秀榜DataAndUnit.dataMap, 训练成绩优秀榜DataAndUnit.unitMap, false, false );
let 右上数据DataAndUnit = objKeyReplace(excelData.右上数据);
ret["api9"] = getKeyValue("右上数据", 右上数据DataAndUnit.dataMap, 右上数据DataAndUnit.unitMap, false, false );
let 比赛类型DataAndUnit = objKeyReplace(excelData.比赛类型);
ret["api10"] = getKeyValue("比赛类型", 比赛类型DataAndUnit.dataMap, 比赛类型DataAndUnit.unitMap, false, false );
let 参赛性别占比DataAndUnit = objKeyReplace(excelData.参赛性别占比);
ret["api11"] = getKeyValue("参赛性别占比", 参赛性别占比DataAndUnit.dataMap, 参赛性别占比DataAndUnit.unitMap, false, false );
ret["api12"] = getListData("校内积分赛", excelData.校内积分赛, ["排名","球员","场次","胜场","负场","积分"], {"排名":"rank","球员":"trainee","场次":"session","胜场":"win","负场":"lose","积分":"points"} );
ret["api13"] = getListData("淘汰赛", excelData.淘汰赛, ["排名","球员","场次","胜场","负场","积分"], {"排名":"rank","学员":"trainee","场次":"session","胜场":"win","负场":"lose","积分":"points"} );
let 学员库DataAndUnit = objKeyReplace(excelData.学员库);
ret["api14"] = getListData("基本信息", excelData.基本信息, ["球员", "球员得分", "对手得分", "对手", "胜负"], {"球员":"selfName", "球员得分":"selfScore", "对手得分":"opponentScore", "对手":"oppenentName", "胜负":"winorlose"} );
//ret["api11"] = getListData("近期比赛", excelData.近期比赛, ["学员1","比分","场次","胜/平/负","积分"], false, false );
}
import { changeDataName } from "../util/tools";
import { getExcelDataBySheetName, analysisExcelDataOfObject, analysisExcelDataOfMoreObject, analysisExcelDataOfList, analysisExcelDataOfStringList, analysisExcelDataTime } from "../util/analysisExcel";
export function get运动员概览() {
let bolckDataList = getExcelDataBySheetName('数据库', '');
let result = {};
let ofMoreObjList = [];
let ofObjList = ["左上数据", "运动员年龄分布", "运动员性别占比", "训练类型", "动作模型练习", "男女训练成绩对比", "月训练量趋势", "训练成绩优秀榜", "右上数据", "比赛类型", "参赛性别占比" ];
let listDataAnalysisInfo = {
"校内积分赛":{
"titleList":["排名", "球员", "场次", "胜场", "负场", "积分"],
"keyValueObj":{"排名":"rank", "球员":"trainee", "场次":"session", "胜场":"win", "负场":"lose", "积分":"integral"}
},
"淘汰赛":{
"titleList":["排名", "球员", "场次", "胜场", "负场", "积分"],
"keyValueObj":{"排名":"rank", "球员":"trainee", "场次":"session", "胜场":"win", "负场":"lose", "积分":"integral"}
}
};
let dataValue = ["基本信息",{
"近期比赛":{
"titleList":["球员", "球员得分", "对手得分", "对手", "胜负"],
"keyValueObj":{"球员":"selfName", "球员得分":"selfScore", "对手得分":"opponentScore", "对手":"oppenentName", "胜负":"winorlose"}
}
}]
// let dataValue = {
// "学员库":{
// "学员姓名":{
// "基本信息":{
// "titleList":["出生日期", "惯用手", "比赛场次", "胜场", "胜率", "近期比赛"],
// "keyValueObj":{"出生日期":"birthday", "惯用手":"dominsnthand", "比赛场次":"matches", "胜场":"winfield", "胜率":"winrate"}
// },
// "近期比赛":{
// "titleList":["球员", "球员得分", "对手得分", "对手", "胜负"],
// "keyValueObj":{"球员":"selfName", "球员得分":"selfScore", "对手得分":"opponentScore", "对手":"oppenentName", "胜负":"winorlose"}
// }
// }
// }
// }
for (let i = 0; i < bolckDataList.length; i++) {
let {blockData, blockTitle} = bolckDataList[i];
let changeName = changeDataName(blockTitle);
if (ofMoreObjList.indexOf(changeName) > -1) result[changeName] = analysisExcelDataOfMoreObject(blockData, false);
if (ofObjList.indexOf(changeName) > -1) result[changeName] = analysisExcelDataOfObject(blockData, true, false);
if (listDataAnalysisInfo[changeName]) result[changeName] = analysisExcelDataOfList(blockData, listDataAnalysisInfo[blockTitle].keyValueObj, false);
}
return result;
}
export function get选手详细分析(){
let bolckDataList = getExcelDataBySheetName('数据库', '');
let result = {};
let ofMoreObjList = ["左侧爆发能量","右侧爆发能量","左侧球移动速度","右侧球移动速度"];
let ofObjList = ["基础信息", "技术特点评分" , "比赛视频", "攻击落点", "防守落点", "选手站位热力发布" ];
let listDataAnalysisInfo = {
"近期比赛概览":{
"titleList":["状态", "球员", "照片", "球员得分", "对手得分", "比赛日期", "对手照片", "对手姓名"],
"keyValueObj":{"状态":"state", "球员":"selfName", "照片":"selfPic", "球员得分":"selfScore", "对手得分":"opponentScore", "比赛日期":"pkTime", "对手照片":"opponentPic", "对手姓名":"oppenentName"}
}
};
for (let i = 0; i < bolckDataList.length; i++) {
let {blockData, blockTitle} = bolckDataList[i];
let changeName = changeDataName(blockTitle);
if (ofMoreObjList.indexOf(changeName) > -1) result[changeName] = analysisExcelDataOfMoreObject(blockData, false);
if (ofObjList.indexOf(changeName) > -1) result[changeName] = analysisExcelDataOfObject(blockData, true, false);
if (listDataAnalysisInfo[changeName]) result[changeName] = analysisExcelDataOfList(blockData, listDataAnalysisInfo[blockTitle].keyValueObj, false);
}
return result;
}
\ No newline at end of file
...@@ -28,6 +28,179 @@ export function getBlockDataByData(dataList) { ...@@ -28,6 +28,179 @@ export function getBlockDataByData(dataList) {
} }
/** /**
* analysisExcelDataOfObject 将excel解出来的数据块按需求解析成可用数据
* @param dataList excel解出来的数据
* @param isJumpTitle 是否跳过解析表头
* @param keyInX key是否横向排列
* @returns 返回 {"数据标题":数据对象 }
*/
export function analysisExcelDataOfObject(dataList, isJumpTitle?, keyInX?) {
let result = {};
if (keyInX) {
let keyList = dataList[0];
let valueList = dataList[1];
let i = isJumpTitle ? 1:0;
for (; i < keyList.length; i++) {
let key = keyList[i];
let value = valueList[i] || null;
result[key] = value;
}
} else {
let y = isJumpTitle ? 1: 0;
for (; y < dataList.length; y++) {
let childList = dataList[y];
let key = childList[0];
let value = childList[1] || null;
result[key] = value;
}
}
return result;
}
export function analysisExcelDataTime(dataList, isJumpTitle?, keyInX?) {
const HOURS = new Date().getHours() + 1;//获取当前时间
let result = {};
if (keyInX) {
let keyList = dataList[0];
let valueList = dataList[1];
let i = isJumpTitle ? 1:0;
for (; i < keyList.length; i++) {
let key = keyList[i];
let value = valueList[i] || null;
result[key] = value;
}
} else {
let y = isJumpTitle ? 1: 0;
for (; y <= HOURS; y++) {
let childList = dataList[y];
let key = childList[0];
let value = childList[1] || null;
result[key] = value;
}
}
return result;
}
/**
* analysisExcelDataOfMoreObject 将excel解出来的数据块按需求解析成可用数据
* @param dataList excel解出来的数据
* @param isJumpTitle 是否跳过解析表头
* @param headerInx 第一个表头数据是否横向排列
* @returns 返回 {"第一个表头数据":{"表头数据":值...} }
*/
export function analysisExcelDataOfMoreObject(dataList, headerInx?) {
let result = {};
let titleList = dataList[0];
if (!headerInx) {
for (let y =1; y < dataList.length; y++) {
let dataTitle = dataList[y][0];
let thisData = {};
for (let x = 1; x < dataList[y].length; x++) {
let key = titleList[x];
thisData[key] = dataList[y][x];
}
result[dataTitle] = thisData;
}
} else {
let indexKeyMap = {};
titleList.forEach((thisTitle, index) => {
if (!index) return;
indexKeyMap[index] = thisTitle;
result[thisTitle] = {};
});
for (let y =1; y < dataList.length; y++) {
let thisKey = dataList[y][0];
for (let x = 1; x < dataList[y].length; x++) {
let thisTitle = indexKeyMap[x];
result[thisTitle][thisKey] = dataList[y][x];
}
}
}
return result;
}
/**
* analysisExcelDataOfList 将excel解出来的数据块按需求解析成可用数据
* @param dataList excel解出来的数据
* @param keyObject 对应关系 {dataList表头名称: 英文}
* @param headerInx 第一个表头数据是否横向排列
* @returns 返回 {"第一个表头数据":{"表头数据":值...} }
*/
export function analysisExcelDataOfList(dataList, keyObject, headerInx?) {
let result = [];
if (!headerInx) {//在y轴上排列
let titleList = dataList[0];
let indexKeyNameMap = {};
titleList.forEach( (info, index) => {
indexKeyNameMap[index + 1] = info;
});
for (let i = 1; i < dataList.length; i++) {
let onceInfo = {};
let subList = dataList[i];
subList.forEach( (info, index) => {
let key = indexKeyNameMap[index + 1];
let checkKey = keyObject[key];
onceInfo[checkKey] = info;
});
result.push(onceInfo);
}
} else {//在x轴上排列
let indexKeyNameMap = {};
dataList.forEach( (info, index) => {
indexKeyNameMap[index + 1] = info[0];
});
let dataMap = {};
for(let y = 0; y < dataList.length; y++) {
let xList = dataList[y];
for (let x = 1; x < xList.length; x++) {
if (!dataMap[x]) dataMap[x] = {};
let key = indexKeyNameMap[y + 1];
let checkKey = keyObject[key];
dataMap[x][checkKey] = xList[x];
}
}
result = Object.values(dataMap);
}
return result;
}
export function analysisExcelDataOfStringList(dataList) {
let result = [];
for (let i = 0; i < dataList.length; i++) {
if (!i) continue;
let subList = dataList[i];
result.push(subList[1]);
}
return result;
}
export function testmain() {
let {sheetMap, sheetList} = getExcel(`${__dirname.substring(0,__dirname.indexOf("out"))}res\\数据模板.xlsx`);
//根据配置表解析成对应数据
let resultMap = {};
for (let sheetName in sheetMap) {
let thisSheetBlockList = getBlockData(sheetMap[sheetName]);
resultMap[sheetName] = thisSheetBlockList;
}
console.log(resultMap);
return resultMap;
}
/**
* getBlockData 数据分块 * getBlockData 数据分块
* @param dataList 解析出来的excel二维数组 * @param dataList 解析出来的excel二维数组
* @returns 返回数据块集合 格式:blockList = [ {blockData:数据块(二维数组), blockTitle:"数据标题"}] * @returns 返回数据块集合 格式:blockList = [ {blockData:数据块(二维数组), blockTitle:"数据标题"}]
...@@ -177,6 +350,8 @@ function checkBlock(dataList) { ...@@ -177,6 +350,8 @@ function checkBlock(dataList) {
return {blockData, blockTitle, delDataList:dataList,notItem}; return {blockData, blockTitle, delDataList:dataList,notItem};
} }
//获取单个excel文件的数据 //获取单个excel文件的数据
function getExcel(filePath) { function getExcel(filePath) {
const workSheetsFromFile = xlsx.parse(filePath); const workSheetsFromFile = xlsx.parse(filePath);
...@@ -190,4 +365,4 @@ function getExcel(filePath) { ...@@ -190,4 +365,4 @@ function getExcel(filePath) {
} }
return {sheetMap, sheetList} return {sheetMap, sheetList}
} }
\ 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