Commit 9e4a86c6 by lixinming
parents c661fcff adbb018c
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
export function limitEnteNameString(name, number?) {
number = number ? number : 13;
if (name.length > number) return `${name.substring(0,number - 2)}...`;
return name;
}
const moneyStrConfig = {
"万亿": 13,
"萬億": 13,
"千亿": 12,
"千億": 12,
"百亿": 11,
"佰億": 11,
"十亿": 10,
"拾億": 10,
"亿": 9,
"億": 9,
"千万": 8,
"千萬": 8,
"百万": 7,
"佰萬": 7,
"十万": 6,
"拾萬": 6,
"万": 5,
"萬": 5,
"千":4,
"百":3,
"十":2,
"美元":1,
"人名币":1,
"元":1,
};
// 汇率
let dollarRate = 6.4731;
//解析金额
export function analysisMoneyStr(mnyStr:string) {
let zeroNum = 1;
let moneyNumber = 0;
for (let key in moneyStrConfig) {
let checkNum = mnyStr.indexOf(key);
if (checkNum > -1) {
zeroNum = moneyStrConfig[key];
moneyNumber = parseFloat(mnyStr.slice(0, checkNum));
break;
}
}
if (mnyStr.replace(/[^0-9]/ig,"") == "") return 0;
if (zeroNum > 1) {
let count = 1;
for (let i = 1; i < zeroNum; i++) {
count = count * 10;
}
zeroNum = count;
}
let money = parseInt(`${zeroNum * moneyNumber}`);
if (mnyStr.indexOf('美元')) money = parseInt(`${money * dollarRate}`);
return money;
}
//缩略金额
export function simplifyMoney(mny:number, str:string) {
let num = moneyStrConfig[str];
let count = 1;
for (let i = 1; i < num; i++) {
count = count * 10;
}
return mny / count;
}
//分离 带单位的数据
function separateDataAndUint(str) {
if (!str) return {data:0, unit:""};
let data = str.replace(/[\u4E00-\u9FA5a-zA-Z]+/,"");
let unit = str.replace(/^(-)?\d+(\.\d+)?/, "");
return {data, unit};
}
//object key替换 带单位
export function objKeyReplace(object, keyInfo = {}, isString = true) {
if (isString) {
//校验字符
for (let key in object) {
if (!object[key]) object[key] = '';
}
} else {
//校验数字
for (let key in object) {
if (!object[key]) object[key] = '0';
}
}
let unitMap = {};
let dataMap = {};
for(let key in object) {
let newKey = keyInfo[key] || key;
let {data, unit} = separateDataAndUint(`${object[key]}` || "");
unitMap[newKey] = unit;
dataMap[newKey] = parseFloat(data);
}
return {dataMap, unitMap};
}
//返回特定key和value的obj
export function objKeyAndValue(dataMap, ...keyList) {
let result = {};
for (let key in dataMap) {
if ( keyList.indexOf(key) > -1 ) result[key] = dataMap[key];
}
return result;
}
//获取键值数据 percent =>为数字的时候 保留几位小数
export function getKeyValue(title, dataMap, unit, total, percent ) {
let data = {
title,
subTitle : title,
total : 0,
list : []
};
let count = 0;
for (let key in dataMap) {
let value = parseFloat(dataMap[key]);
count += value;
if (total) data.total += value;
}
for (let key in dataMap) {
let thisUnit = "";
if (unit) {
if (typeof unit == "string") thisUnit = unit;
else thisUnit = unit[key];
}
let value = parseFloat(dataMap[key]);
if (percent) {
thisUnit = '%';
value = getDecimalForN( value/count, percent);
}
let onceInfo:any = { key, value, unit:thisUnit };
data.list.push(onceInfo);
}
return data;
}
export function getKeyStringValue(title, dataMap) {
let data = {
title,
subTitle : title,
total : 0,
list : []
};
for (let key in dataMap) {
data.list.push({
key,
value:dataMap[key]
});
}
return data;
}
function getChartMin(num) {
if (num > 0) return 0;
return Math.floor(num);
}
export function getChartData(title, dataMap, unit, percent ) {
unit = unit || "";
let data = {
title, yMaxValue:0, yMinValue:new Date().valueOf(), yStepValue:0, unit : percent ? "%" : unit ,
data: { title: title , total : 0, list : [ ] }
}
let count = 0;
for (let key in dataMap) {
let value = parseFloat(dataMap[key] || 0);
data.yMaxValue = Math.max(data.yMaxValue, value);
data.yMinValue = Math.min(data.yMinValue, value);
count += 1;
data.data.total += value;
}
for (let key in dataMap) {
let value = parseFloat(dataMap[key]);
let thisUnit = unit;
if (percent) {
thisUnit = '%';
value = getDecimalForN( value/count, percent);
}
let onceInfo = { key, unit:thisUnit, value };
data.data.list.push(onceInfo)
}
data.yMinValue = getChartMin(data.yMinValue);
data.yStepValue = getChartStepNumber(Math.ceil((data.yMaxValue - data.yMinValue) / count));
let maxVal = Math.ceil(data.yMaxValue);
data.yMaxValue = maxVal+(data.yStepValue - (maxVal%data.yStepValue));
return data;
}
export function getListData( title, dataList, titleList, titleValueObj ) {
let data = { title, subTitle:title, total:dataList.length, titleList, valueList:[] };
dataList.forEach(info => {
let onceList = [];
titleList.forEach(titleName => {
onceList.push(info[ titleValueObj[titleName] ]);
});
data.valueList.push(onceList);
});
return data;
}
//多个y轴的条柱状图 dataMap => {"name":{"key1":1111,"key2":232, "key3":dsfs, ... }, ... }
export function getMoreYChartData(title, dataMap, percent, unit ) {
let data = { title, dataList: [] };
for (let subDataName in dataMap) {
let onceData = { title:subDataName, yMaxValue:0, yMinValue:new Date().valueOf(), yStepValue:0, unit:"", total : 0, list : [ ] };
let thisDataInfo = dataMap[subDataName];
let thisCount = 0;
for (let key in thisDataInfo) {
let value = parseFloat(thisDataInfo[key]);
onceData.yMaxValue = Math.max(onceData.yMaxValue, value);
onceData.yMinValue = Math.min(onceData.yMinValue, value);
onceData.total += value;
thisCount += 1;
}
onceData.yStepValue = getChartStepNumber(Math.ceil( (onceData.yMaxValue - onceData.yMinValue) / thisCount) );
let thisUnit;
if (percent) {
thisUnit = "%";
onceData.yMaxValue = 100;
onceData.yStepValue = Math.ceil( (100 - onceData.yMinValue) / onceData.total ) ;
}
else if (typeof unit == 'object') {
thisUnit = unit[subDataName] || "";
} else thisUnit = unit || "";
for (let key in thisDataInfo) {
let value;
if (percent) value = getDecimalForN( value/onceData.total, percent);
else value = parseFloat(thisDataInfo[key]);
let onceInfo = { key, unit:thisUnit, value };
onceData.list.push(onceInfo)
}
onceData.total = getDecimalForN( onceData.total, 1);
let maxVal = Math.ceil(onceData.yMaxValue);
onceData.yMinValue = getChartMin(onceData.yMinValue);
onceData.yMaxValue = maxVal+(onceData.yStepValue - (maxVal%onceData.yStepValue));
data.dataList.push(onceData);
}
return data;
}
//一个y轴的多个数据的柱状图
export function getSingleYAndMoreData(title, dataMap, percent, unit) {
let data = { title, dataList:[], yMaxValue:0, yMinValue:new Date().valueOf(), yStepValue:0, unit:"", total : 0 };
let maxCount = 0;
for (let subDataName in dataMap) {
let onceData = { title:subDataName, list:[] };
let thisDataCount = 0;
let analysisMap = objKeyReplace(dataMap[subDataName])
let thisData = analysisMap.dataMap;
let thisMax = 0;
for (let key in thisData) {
let value = parseFloat(dataMap[key]);
thisDataCount += value;
thisMax += 1;
}
maxCount = Math.max(maxCount, thisMax);
let thisUnit;
if (percent) thisUnit = "%";
else if (typeof unit == 'object') {
thisUnit = unit[subDataName] || "";
} else thisUnit = unit || "";
for (let key in thisData) {
let value;
if (percent) value = getDecimalForN( value/thisDataCount, percent);
else value = parseFloat(thisData[key]);
data.yMaxValue = Math.max(data.yMaxValue, value);
data.yMinValue = Math.min(data.yMinValue, value);
data.total += value;
let onceInfo = { key, unit:thisUnit, value };
onceData.list.push(onceInfo)
}
data.dataList.push(onceData);
}
data.yMinValue = getChartMin(data.yMinValue);
data.yMaxValue = Math.ceil(data.yMaxValue);
data.yStepValue = getChartStepNumber( Math.ceil((data.yMaxValue - data.yMinValue) / maxCount));
return data;
}
function getChartStepNumber(number) {
let lenth = `${number}`.length;
let count = 1;
for (let i = 1; i < lenth; i++) {
count = count * 10;
}
return number + ( count - (number % count) );
}
//字符模板
export function getStringMoreData(title, valueList) {
let result = { title, data:{} };
valueList.forEach( (info, index) => {
let key = index + 1
result.data[`${key}`] = info;
});
return result;
}
//撒点图 cutApartXAndY:[分割的x坐标,分割的y坐标]
export function getDropMoreData(dataList, title, subTitle, cutApartXAndY?) {
let data:any = {title, subTitle, dataList:[], xMax:0, xMin:new Date().valueOf(), yMax:0, yMin:new Date().valueOf() };
dataList.forEach(info => {
let {x, y} = info;
let thisDropXInfo = separateDataAndUint(`${x}`);
let thisDropX = parseFloat(thisDropXInfo.data);
let thisDropYInfo = separateDataAndUint(`${y}`);
let thisDropY = parseFloat(thisDropYInfo.data);
data.xMax = Math.max(thisDropX, data.xMax);
data.xMin = Math.min(thisDropX, data.xMin);
data.yMax = Math.max(thisDropY, data.yMax);
data.yMin = Math.min(thisDropY, data.yMin);
let value = [thisDropX, thisDropY];
let type = 1;
if (cutApartXAndY) {
let cutX = cutApartXAndY[0];
let cutY = cutApartXAndY[1];
if ( thisDropX < cutX && thisDropY > cutY) type = 1;
else if ( thisDropX > cutX && thisDropY > cutY ) type = 2;
else if ( thisDropX < cutX && thisDropY < cutY ) type = 3;
else type = 4;
}
data.dataList.push({value, name:info.name||"", type});
});
if (cutApartXAndY) {
data.cutApartX = cutApartXAndY[0];
data.cutApartY = cutApartXAndY[1];
}
let count = dataList.length;
let xAvg = Math.ceil((data.xMax - data.xMin) / count);
data.xMax = Math.floor( data.xMax + xAvg);
data.xMin = Math.floor( data.xMin - xAvg);
let yAvg = Math.ceil((data.yMax - data.yMin) / count);
data.yMax = Math.floor( data.yMax + yAvg);
data.yMin = Math.floor( data.yMin - yAvg);
return data;
}
//按需取保留小数长度 tenNumber保留小数位 1位就填1
export function getDecimalForN(number, n) {
let ten = 1;
for (let i = 0; i < n; i ++) {
ten = ten * 10;
}
return Math.ceil(number * ten) / ten
}
//生日获取时间段
export function getAgeByBirthday(birthday:string) {
let b = new Date(birthday).valueOf();
let d = new Date().valueOf();
let onceYear = 365 * 24 * 3600 * 1000;
let age = Math.floor( (d - b) / onceYear );
if (age >= 21 && age <= 30 ) return "21-30";
else if (age >= 31 && age <= 40 ) return "35-45";
else if (age >= 41 && age <= 50 ) return "46-55";
else if (age > 50) return "50岁以上";
else return '其他';
}
export function analysisAddOrRMData(str) {
str = `${str}`;
let checkStr = str.replace(/增加/, "");
let result = checkStr.replace(/减少/, "-");
return result;
}
export function changeDataName(str) {
let result = str.replace(/[()""“”()-]/, "_");
for (let i =0; i < 10; i++) {
result = result.replace(/[()""“”()-]/, "_");
}
return result;
}
//数据保留两位小数
export function getDataMapDecimalForN(dataMap, number?) {
let tenCount = number ? number : 2;
let result = {};
for (let key in dataMap) {
let value = dataMap[key];
if (typeof value == 'string') {
let {data } = separateDataAndUint(value);
value = parseFloat(data);
}
result[key] = getDecimalForN(value, tenCount);
}
return result;
}
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