Commit fdc7166a by lixinming

no message

parent 1ac763f5
import { info } from "console"; import { info } from "console";
import { get选手详细分析 } from "../data/analysisData"; import { get选手详细分析 } from "../data/analysisData";
import { getBaseData, get单前比赛对局时间节点, get右侧数据, get图表, get散点图, get比赛详情, get近期比赛概览 } from "../data/xsxxfxData";
import { getChartData, objKeyReplace, getKeyValue, getSingleYAndMoreData, getListData, getMoreYChartData } from "../util/tools"; import { getChartData, objKeyReplace, getKeyValue, getSingleYAndMoreData, getListData, getMoreYChartData } from "../util/tools";
export function getData(req, res) { export async function getData(req, res) {
let ret:any = {}; let ret:any = {};
let excelData:any = get选手详细分析(); let { pid } = req.query;
let 基础信息DataAndUnit = objKeyReplace(excelData.基础信息); let baseInfo:any = await getBaseData(pid);
ret["api1"] = getKeyValue("基础信息", 基础信息DataAndUnit.dataMap, 基础信息DataAndUnit.unitMap, false, false );
let 技术特点评分DataAndUnit = objKeyReplace(excelData.技术特点评分); let 基础信息DataAndUnit = objKeyReplace(baseInfo.基础信息);
ret["api2"] = getKeyValue("技术特点评分", 技术特点评分DataAndUnit.dataMap, 技术特点评分DataAndUnit.unitMap, false, false ); ret["base1"] = getKeyValue("基础信息", 基础信息DataAndUnit.dataMap, 基础信息DataAndUnit.unitMap, false, false );
ret["api3"] = getListData("近期比赛概览", excelData.近期比赛概览, ["状态", "球员", "照片", "球员得分", "对手得分", "比赛日期", "对手照片", "对手姓名"], {"状态":"state", "球员":"selfName", "照片":"selfPic", "球员得分":"selfScore", "对手得分":"opponentScore", "比赛日期":"pkTime", "对手照片":"opponentPic", "对手姓名":"oppenentName"} ); let 技术特点评分DataAndUnit = objKeyReplace(baseInfo.技术特点评分);
ret["base2"] = getKeyValue("技术特点评分", 技术特点评分DataAndUnit.dataMap, 技术特点评分DataAndUnit.unitMap, false, false );
let 比赛视频DataAndUnit = objKeyReplace(excelData.比赛视频); let jqbsglInfo = await 近期比赛概览(pid, null);
ret["api4"] = getKeyValue("比赛视频", 比赛视频DataAndUnit.dataMap, 比赛视频DataAndUnit.unitMap, false, false ); ret["jqbsgl"] = jqbsglInfo;
ret["api5"] = getSingleYAndMoreData("左侧爆发能量", excelData.左侧爆发能量, false, false); let mid = 1;
if (jqbsglInfo.list[0] && jqbsglInfo.list[0].mid ) mid = jqbsglInfo.list[0].mid;
let bsjbxxInfo = await 比赛信息(mid);
ret["bsjbxx"] = bsjbxxInfo["基本信息"];
ret["videourl"] = bsjbxxInfo["url"];
ret["api6"] = getSingleYAndMoreData("右侧爆发能量", excelData.右侧爆发能量, false, false); let { attackData, defenceData, stationData } = await get右侧数据(mid);
ret["attack"] = attackData;
ret["defence"] = defenceData;
ret["station"] = stationData;
let chartData = await 图表分析数据(mid, 1, 1);
ret["leftpower"] = chartData["左侧爆发能量"];
ret["rightpower"] = chartData["右侧爆发能量"];
ret["leftspeed"] = chartData["左侧球移动速度"];
ret["rightspeed"] = chartData["右侧球移动速度"];
ret["drop"] = chartData["散点数据"];
res.send(ret);
}
//接口2 近期比赛概览
export async function getjqbsgl(req, res) {
let { pid, date } = req.query;
let ret:any = {};
ret["jqbsgl"] = await 近期比赛概览(pid, date);
res.send(ret);
}
//接口三 点击近期比赛概览
export async function getbsglxq(req, res) {
let {mid} = req.query;
let ret:any = {};
let bsjbxxInfo = await 比赛信息(mid);
ret["bsjbxx"] = bsjbxxInfo["基本信息"];
ret["videourl"] = bsjbxxInfo["url"];
let { attackData, defenceData, stationData } = await get右侧数据(mid);
ret["attack"] = attackData;
ret["defence"] = defenceData;
ret["station"] = stationData;
let chartData = await 图表分析数据(mid, 1, 1);
ret["leftpower"] = chartData["左侧爆发能量"];
ret["rightpower"] = chartData["右侧爆发能量"];
ret["leftspeed"] = chartData["左侧球移动速度"];
ret["rightspeed"] = chartData["右侧球移动速度"];
ret["drop"] = chartData["散点数据"];
res.send(ret);
}
//接口4
export async function get图表数据(req, res) {
let {mid, rid, gid} = req.query;
let ret:any = {};
let chartData = await 图表分析数据(mid, rid, gid);
ret["leftpower"] = chartData["左侧爆发能量"];
ret["rightpower"] = chartData["右侧爆发能量"];
ret["leftspeed"] = chartData["左侧球移动速度"];
ret["rightspeed"] = chartData["右侧球移动速度"];
ret["drop"] = chartData["散点数据"];
res.send(ret);
}
ret["api7"] = getSingleYAndMoreData("左侧球移动速度", excelData.左侧球移动速度, false, false);
ret["api8"] = getSingleYAndMoreData("右侧球移动速度", excelData.右侧球移动速度, false, false);
let 攻击落点DataAndUnit = objKeyReplace(excelData.攻击落点); async function 近期比赛概览(pid, inTime) {
ret["api9"] = getKeyValue("攻击落点", 攻击落点DataAndUnit.dataMap, 攻击落点DataAndUnit.unitMap, false, false ); let time = inTime || new Date();
let 近期比赛概览数据 = await get近期比赛概览(pid, time);
let subTitle = 近期比赛概览数据.length > 0 ? 近期比赛概览数据[0].date : "";
return {
title:"近期比赛概览",
subTitle,
list:近期比赛概览数据
}
}
async function 比赛信息(mid) {
let {selfPic, selfName,result, selfScore, date, opponentScore, opponentPic, opponentName, videoUrl } = await get比赛详情(mid);
let opponentResult = result == "胜" ? "负" : "胜";
return {
"基本信息":[[selfPic, selfName, result ],[selfScore, date, opponentScore ],[opponentPic, opponentName, opponentResult]],
"url":videoUrl
}
}
let 防守落点DataAndUnit = objKeyReplace(excelData.防守落点); async function 图表分析数据(mid, rid, gid) {
ret["api10"] = getKeyValue("防守落点", 防守落点DataAndUnit.dataMap, 防守落点DataAndUnit.unitMap, false, false ); let 图表数据 = await get图表(mid, rid, gid);
let 散点数据 = await get散点图(mid, rid, gid);
let 选手站位热力发布DataAndUnit = objKeyReplace(excelData.选手站位热力发布); return {
ret["api11"] = getKeyValue("选手站位热力发布", 选手站位热力发布DataAndUnit.dataMap, 选手站位热力发布DataAndUnit.unitMap, false, false ); "左侧爆发能量":图表数据["左侧爆发能量"],
"右侧爆发能量":图表数据["右侧爆发能量"],
"左侧球移动速度":图表数据["左侧球移动速度"],
"右侧球移动速度":图表数据["右侧球移动速度"],
"散点数据":散点数据
}
} }
import { selectData, selectOnceObjectData } from "./orcaleInterface"; import { selectData, selectOnceObjectData } from "./orcaleInterface";
const percentStr = '&%'; export async function getBaseData(id) {
const sqlKeyValueConfig = {
"基础信息":{
sql:"select * from students_detail",
analysis:{ "姓名" : "name", "性别" : "sex", "英语名字": "en_name", "主教练": "coach", "出生年份": "birth", "身高": "height", "体重": "weight" }
},
"运动员年龄分布":{
sql:"select * from age_range",
analysis:{"6-11岁":"age6_11", "12-15岁":"age12_15", "16-22岁":"age16_22", "23岁以上":"age_b23" },
haveUnit:"&%"
},
"运动员性别占比":{
sql:"select * from sex_ratio",
analysis:{ "男":"male", "女":"female" },
haveUnit:"&%"
},
"训练类型":{
sql:"select * from train_type",
analysis:{"外旋练习":"outspin", "内旋练习":"inspin", "反手练习":"backhand", "杀球练习":"smash" },
haveUnit:"&%"
},
"动作模型练习":{
sql:"select * from motion_model",
analysis:{ "模型A":"modelA", "模型B":"modelB", "模型C":"modelC", "模型D":"modelD" },
haveUnit:"&%"
},
"右上数据":{
sql:"select * from match_and_player_count",
analysis:{ "比赛场次":"match_count", "比赛场次增幅":"match_count_vary&%", "参赛覆盖人员":"player_count", "参赛覆盖人员增幅":"player_count_vary&%"},
},
"比赛类型":{
sql:"select * from match_type",
analysis:{ "U11":"U11", "U14":"U14", "U18":"U18", "U22":"U22" },
haveUnit:"&%"
},
"参赛性别占比":{
sql:"select * from player_sex_ratio",
analysis:{ "男":"male", "女":"female" },
haveUnit:"&%"
},
};
const sqlListConfig = {
"训练成绩优秀榜":{
sql:"select * from train_excellent_list where RANK < 7 order by RANK"
}
};
export async function getData() {
let result = {}; let result = {};
for (let dataName in sqlKeyValueConfig) { let sql = 'select * from students_detail where pid=Placeholder1';
let { sql, analysis, haveUnit} = sqlKeyValueConfig[dataName]; let baseObj = { "img":"self_pic","姓名":"name", "性别" :"sex", "英语名字":"en_name", "主教练" :"coach", "出生年份" :"birth", "身高" :"height", "体重" :"weight", "比赛场次" :"match_count", "胜场" :"win_count", "胜率" :"win_rate&%", "排名" :"rank", "惯用手" :"habitual_hand" };
let selectResult = await selectOnceObjectData(sql); let scoreObj = { "击球速度":"hit_speed", "击球力量":"hit_power", "正手能力":"forehand", "反手能力":"backhand", "得分率":"score_rate&%"};
let onceData:any = {}; let selectResult = await selectOnceObjectData(sql, id);
for (let key in analysis) {
let configKey = analysis[key];
onceData[key] = checkUnit(configKey, selectResult, haveUnit);
}
result[dataName] = onceData;
}
for (let dataName in sqlListConfig) {
let { sql, analysis} = sqlListConfig[dataName];
let selectResult = await selectData(sql);
let onceData = []; let baseData = {};
if (analysis) {//填充特化字段逻辑 for (let key in baseObj) {
let configKey = baseObj[key];
} else onceData = onceData.concat(selectResult); baseData[key] = checkUnit(configKey, selectResult, false);
}
result["基础信息"] = baseData;
result[dataName] = onceData; let scoreData = {};
for (let key in scoreObj) {
let configKey = scoreObj[key];
scoreData[key] = checkUnit(configKey, selectResult, false);
} }
result["基础信息"] = scoreData;
return result; return result;
...@@ -91,28 +38,167 @@ function checkUnit(str, data, allUnit?) { ...@@ -91,28 +38,167 @@ function checkUnit(str, data, allUnit?) {
} }
async function get基础信息() {
} export async function get近期比赛概览(pid, checkDate) {
async function get技术特点评分() { let sql = "select * from recent_match where self_pid = Placeholder1 and date < Placeholder2";
let selectResult = await selectData(sql, pid, checkDate);
let result = [];
selectResult.forEach(info => {
let selfScore = info.self_score || 0;
let opponentScore = info.opponent_score || 0;
let matchResult = selfScore > opponentScore ? "胜" : "负";
result.push({
selfName:info.self_name,
selfPic:info.self_pic,
selfScore,
opponentPic:info.opponent_pic,
opponentScore,
oppenentName:info.opponent_name,
pkTime:info.date,
result:matchResult,
mid:info.mid
});
});
return result;
} }
async function get近期比赛概览() {
export async function get比赛详情(mid) {
let sql = "select * from match_information where mid = Placeholder1";
let subSql = "select m_date from recent_match where mid = Placeholder1 "
let selectInfo = await selectOnceObjectData(sql, mid);
let timeInfo = await selectOnceObjectData(subSql, mid);
let selfScore = selectInfo.self_score || 0;
let opponentScore = selectInfo.opponent_score || 0;
let matchResult = selfScore > opponentScore ? "胜" : "负";
let result = {
mid:selectInfo.m_id,
selfName:selectInfo.self_name,
selfPic:selectInfo.self_pic,
selfScore:selfScore,
opponentName:selectInfo.opponent_name,
opponentPic:selectInfo.opponent_pic,
opponentScore:opponentScore,
videoUrl:selectInfo.video_url,
result:matchResult,
date:timeInfo.m_date
};
return result;
} }
async function get比赛视频() {
} export async function get单前比赛对局时间节点(mid) {
async function get左侧爆发能量() { let sql = "select * from match_video where Placeholder1";
let selectInfo = await selectData(sql, mid);
let rankMap = {};
selectInfo.forEach(info => {
let { r_id, g_id, start_t, end_t } = info;
if ( !rankMap[r_id] ) rankMap[r_id] = {};
rankMap[r_id][g_id] = {start:start_t, end:end_t, gName:`第${g_id}轮`, gId:g_id};
});
let resultMap = {};
for (let key in rankMap) {
resultMap[key] = Object.keys(rankMap[key]);
}
return resultMap;
} }
async function get右侧爆发能量() {
export async function get图表(mid, rid, gid) {
const sqlInfo = {
"左侧爆发能量":{
sql:"select * from left_power where m_id = Placeholder1 and r_id = Placeholder2 and g_id = Placeholder3",
keyInfo:{"self":"self_left_power", "opponent":"opponent_left_power", "time":"time_left" }
},
"右侧爆发能量":{
sql:"select * from right_power where m_id = Placeholder1 and r_id = Placeholder2 and g_id = Placeholder3",
keyInfo:{"self":"self_right_power", "opponent":"opponent_right_power", "time":"time_right" }
},
"左侧球移动速度":{
sql:"select * from left_ballmove where m_id = Placeholder1 and r_id = Placeholder2 and g_id = Placeholder3",
keyInfo:{"self":"self_left_ballmove", "opponent":"opponent_left_ballmove", "time":"time_left" }
},
"右侧球移动速度":{
sql:"select * from right_ballmove where m_id = Placeholder1 and r_id = Placeholder2 and g_id = Placeholder3",
keyInfo:{"self":"self_right_ballmove", "opponent":"opponent_right_ballmove", "time":"time_right" }
}
};
let result = {};
for (let dataName in sqlInfo) {
let {sql, keyInfo} = sqlInfo[dataName];
let onceData = await selectData(sql, mid, rid, gid);
let list = [];
onceData.forEach(info => {
let addInfo = {};
for (let configKey in keyInfo) {
addInfo[configKey] = info[keyInfo[configKey] ];
}
list.push(addInfo);
});
result[dataName] = list;
}
return result;
} }
async function get左侧球移动速度() {
export async function get散点图(mid, rid, gid) {
let sql = "select * from attack_point where m_id = Placeholder1 and r_id = Placeholder2 and g_id = Placeholder3";
let selectResult = await selectData(sql, mid, rid, gid);
let result = [];
selectResult.forEach(info => {
result.push({
time:info.m_time,
x:info.x,
y:info.y
});
});
return result;
} }
async function get右侧球移动速度() {
export async function get右侧数据(mid) {
let airSql = "select * from attack_and_defense_area where mid = Placeholder1";
let mastResultStatsData = await selectData(airSql, mid);
let attackData = [];
let defenceData = [];
mastResultStatsData.forEach(info => {
let {area_id, attack, defence} = info;
attackData.push({
area:area_id,
attack,
});
defenceData.push({
area:area_id,
defence
});
});
let stationSql = "select * from thermal_station where mid = Placeholder1";
let stationStatsData = await selectData(stationSql, mid);
let stationData = [];
stationStatsData.forEach(info => {
let {area_id, self_count_rate, opponent_count_rate} = info;
stationData.push({
area:area_id,
self:self_count_rate,
opponent:opponent_count_rate
});
});
return {attackData, defenceData, stationData};
} }
\ No newline at end of file
...@@ -3,11 +3,21 @@ import * as ydyglBiz from '../biz/ydygl'; ...@@ -3,11 +3,21 @@ import * as ydyglBiz from '../biz/ydygl';
import * as xsxxfxBiz from '../biz/xsxxfx'; import * as xsxxfxBiz from '../biz/xsxxfx';
export function setRouter(httpServer){ export function setRouter(httpServer){
httpServer.get('/ydygl', asyncHandler(ydyglBiz.getData));
httpServer.get('/xsxxfx', asyncHandler(xsxxfxBiz.getData)); httpServer.get('/xsxxfx', asyncHandler(xsxxfxBiz.getData));
httpServer.get('/jqbsgl', asyncHandler(xsxxfxBiz.getjqbsgl));
httpServer.get('/bsglxq', asyncHandler(xsxxfxBiz.getbsglxq));
httpServer.get('/chart', asyncHandler(xsxxfxBiz.get图表数据));
httpServer.get('/ydygl', asyncHandler(ydyglBiz.getData));
httpServer.get('/ydyglbsls', asyncHandler(ydyglBiz.getCompetition));//比赛接口 httpServer.get('/ydyglbsls', asyncHandler(ydyglBiz.getCompetition));//比赛接口
//===
httpServer.post('/ydygl', asyncHandler(ydyglBiz.getData)); httpServer.post('/ydygl', asyncHandler(ydyglBiz.getData));
httpServer.post('/xsxxfx', asyncHandler(xsxxfxBiz.getData));
httpServer.post('/ydyglbsls', asyncHandler(ydyglBiz.getCompetition));//比赛接口 httpServer.post('/ydyglbsls', asyncHandler(ydyglBiz.getCompetition));//比赛接口
httpServer.post('/xsxxfx', asyncHandler(xsxxfxBiz.getData));
httpServer.post('/jqbsgl', asyncHandler(xsxxfxBiz.getjqbsgl));
httpServer.post('/bsglxq', asyncHandler(xsxxfxBiz.getbsglxq));
httpServer.post('/chart', asyncHandler(xsxxfxBiz.get图表数据));
} }
\ 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