Commit 33fb4275 by lixinming

no message

parent 7703d859
......@@ -986,6 +986,11 @@
"resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz",
"integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew="
},
"pyfl": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/pyfl/-/pyfl-1.1.4.tgz",
"integrity": "sha512-tEwj+SYfOk7zMStPrcDvadkUYomRIX6URQA/dl+YDqaEZlP9gEXM501FUsorz5HozCkfIeFOoT7U2jTElQ+zYg=="
},
"qs": {
"version": "6.5.2",
"resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz",
......
......@@ -18,6 +18,7 @@
"node-xlsx": "^0.16.1",
"nodemailer": "^6.1.1",
"oracledb": "^5.3.0",
"pyfl": "^1.1.4",
"request": "^2.88.0",
"svg-captcha": "^1.3.12",
"ws": "^5.2.2"
......
import { get运动员概览 } from "../data/analysisData";
import { get积分赛淘汰赛数据 } from "../data/ydyglData";
import { get最近一条淘汰赛时间, get男女训练成绩对比, get积分赛淘汰赛数据, 基础数据 } from "../data/ydyglData";
import { getChartData, objKeyReplace, getKeyValue, getSingleYAndMoreData, getListData } from "../util/tools";
export function getData(req, res) {
export async function getData(req, res) {
let ret:any = {};
let excelData:any = get运动员概览();
let dataInfo:any = get运动员概览();
let 左上数据DataAndUnit = objKeyReplace(excelData.左上数据);
let 左上数据DataAndUnit = objKeyReplace(dataInfo.左上数据);
ret["api1"] = getKeyValue("左上数据", 左上数据DataAndUnit.dataMap, 左上数据DataAndUnit.unitMap, false, false );
let 运动员年龄分布DataAndUnit = objKeyReplace(excelData.运动员年龄分布);
let 运动员年龄分布DataAndUnit = objKeyReplace(dataInfo.运动员年龄分布);
ret["api2"] = getKeyValue("运动员年龄分布", 运动员年龄分布DataAndUnit.dataMap, 运动员年龄分布DataAndUnit.unitMap, false, false );
let 运动员性别占比DataAndUnit = objKeyReplace(excelData.运动员性别占比);
let 运动员性别占比DataAndUnit = objKeyReplace(dataInfo.运动员性别占比);
ret["api3"] = getKeyValue("运动员性别占比", 运动员性别占比DataAndUnit.dataMap, 运动员性别占比DataAndUnit.unitMap, false, false );
let 训练类型DataAndUnit = objKeyReplace(excelData.训练类型);
let 训练类型DataAndUnit = objKeyReplace(dataInfo.训练类型);
ret["api4"] = getKeyValue("训练类型", 训练类型DataAndUnit.dataMap, 训练类型DataAndUnit.unitMap, false, false );
let 动作模型练习DataAndUnit = objKeyReplace(excelData.动作模型练习);
let 动作模型练习DataAndUnit = objKeyReplace(dataInfo.动作模型练习);
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.右上数据);
let 右上数据DataAndUnit = objKeyReplace(dataInfo.右上数据);
ret["api9"] = getKeyValue("右上数据", 右上数据DataAndUnit.dataMap, 右上数据DataAndUnit.unitMap, false, false );
let 比赛类型DataAndUnit = objKeyReplace(excelData.比赛类型);
let 比赛类型DataAndUnit = objKeyReplace(dataInfo.比赛类型);
ret["api10"] = getKeyValue("比赛类型", 比赛类型DataAndUnit.dataMap, 比赛类型DataAndUnit.unitMap, false, false );
let 参赛性别占比DataAndUnit = objKeyReplace(excelData.参赛性别占比);
let 参赛性别占比DataAndUnit = objKeyReplace(dataInfo.参赛性别占比);
ret["api11"] = getKeyValue("参赛性别占比", 参赛性别占比DataAndUnit.dataMap, 参赛性别占比DataAndUnit.unitMap, false, false );
ret["api12"] = getListData("校内积分赛", excelData.校内积分赛, ["排名","球员","场次","胜场","负场","积分"], {"排名":"rank","球员":"trainee","场次":"session","胜场":"win","负场":"lose","积分":"points"} );
ret["api8"] = getListData("训练成绩优秀榜", dataInfo.训练成绩优秀榜, ["排名","照片","成绩","姓名"], {"排名":"rank","照片":"self_pic","成绩":"grade","姓名":"p_name"} );
ret["api13"] = getListData("淘汰赛", excelData.淘汰赛, ["排名","球员","场次","胜场","负场","积分"], {"排名":"rank","学员":"trainee","场次":"session","胜场":"win","负场":"lose","积分":"points"} );
let {maleAndFemale, countMap} = await get男女训练成绩对比();
let 学员库DataAndUnit = objKeyReplace(excelData.学员库);
ret["api6"] = getSingleYAndMoreData("男女训练成绩对比", maleAndFemale, false, false );
ret["api7"] = getChartData("月训练量趋势", countMap, false, false );
let 最新一条数据 = await get最近一条淘汰赛时间();
let data = await get积分赛淘汰赛数据(最新一条数据.time, 最新一条数据.type);
let dataName = 最新一条数据.type == 1 ? "淘汰赛" : "校内积分赛";
ret["matchlist"] = getListData(dataName, data, ["排名","学员","场次","胜场","负场","积分"], {"排名":"rank","学员":"name","场次":"gameCount","胜场":"win","负场":"lose","积分":"points"} );
ret["api14"] = getListData("基本信息", excelData.基本信息, ["球员", "球员得分", "对手得分", "对手", "胜负"], {"球员":"selfName", "球员得分":"selfScore", "对手得分":"opponentScore", "对手":"oppenentName", "胜负":"winorlose"} );
ret["api12"] = await 基础数据();
//ret["api11"] = getListData("近期比赛", excelData.近期比赛, ["学员1","比分","场次","胜/平/负","积分"], false, false );
res.send(ret);
......@@ -55,11 +45,10 @@ export function getData(req, res) {
//淘汰赛积分赛接口
export async function getCompetition(req, res) {
let type = 1;
let time = 1;
let { time, type } = req.query;
let data = await get积分赛淘汰赛数据(time, type);
let ret:any = {};
let dataName = type == 1 ? "淘汰赛" : "校内积分赛";
ret["api11"] = getListData(dataName, data, ["排名","球员","场次","胜场","负场","积分"], {"排名":"rank","学员":"trainee","场次":"session","胜场":"win","负场":"lose","积分":"points"} );
ret["matchlist"] = getListData(dataName, data, ["排名","学员","场次","胜场","负场","积分"], {"排名":"rank","学员":"name","场次":"gameCount","胜场":"win","负场":"lose","积分":"points"} );
res.send(ret);
}
......@@ -42,8 +42,6 @@ const sqlKeyValueConfig = {
analysis:{ "男":"male", "女":"female" },
haveUnit:"&%"
}
};
const sqlListConfig = {
"训练成绩优秀榜":{
......@@ -51,7 +49,7 @@ const sqlListConfig = {
}
};
export async function getData() {
export async function get运动员概览() {
let result = {};
......@@ -94,40 +92,59 @@ function checkUnit(str, data, allUnit?) {
}
export async function get最近一条淘汰赛时间() {
let sql = "select g_month,g_type from points_competition"
let result = await selectOnceObjectData(sql);
return {time:result["g_month"], type:result["g_type"]};
}
//todo
export async function get积分赛淘汰赛数据(time, type) {
//这里要单独做,切换时间的时候有个接口,直接调用这个就可以 根据时间和类型来拼sql
//他们数据表少了时间字段,少了比赛类型字段(淘汰赛,积分赛)
let sql = 'select * from points_competition';
let selectResult = await selectData(sql);
return selectResult;
let sql = 'select * from points_competition where g_month = Placeholder1 and g_type = Placeholder2 and ROWNUM < 10 order by rank';
let selectResult = await selectData(sql, time, type);
let list = [];
selectResult.forEach(info => {
let {rank, p_name, game_count, win, lose, points} = info;
list.push({
rank,
p_name:p_name,
gameCount:game_count,
win,
lose,
points
});
});
return list;
}
//todo 少了一张表
async function 男女训练成绩对比() {
let sql = "select * from train_month_sex";
let info = await selectData(sql);
let result = {
"月份":info.month_sex,
"女":info.female,
"男":info.male
}
return result;
}
//todo 同上
async function 月训练量趋势() {
export async function get男女训练成绩对比() {
let sql = "select * from train_month_sex";
let info = await selectData(sql);
let result = {
"月份":info.month_sex,
"女":info.female,
"男":info.male
}
return result;
let selectResult = await selectData(sql);
let maleAndFemale = {};// {"男":[{key:"1月", value:男值 }], "女":[{key:"1月", value:女值 }]}
let countMap = {};// {"1月":总和, }
selectResult.forEach(info => {
let {month_sex, female, male} = info;
if ( !maleAndFemale[female] ) maleAndFemale[female] = [];
maleAndFemale[female].push({
key:month_sex,
value:female
});
if ( !maleAndFemale[male] ) maleAndFemale[male] = [];
maleAndFemale[male].push({
key:month_sex,
value:male
});
countMap[month_sex] = female + male;
});
return {maleAndFemale, countMap};
}
// 比赛类型 他们给的文档字段有问题 需要核对
export async function 学员库() {
let sql = "select p_name from student";
......@@ -142,43 +159,49 @@ export async function 学员库() {
}
export async function 基础数据() {
//需要确认 student 表的pid和 recent_match表的 self_pid 有没有关联 此处默认有关联 没有关联
//需要确认 a对战b 数据库会出现一条数据还是两条数据 此出默认两条数据 根据a显示数据 a有几场数据出现几条数据
//需要确认 recent_match表中的状态字段是多余的
//需要确认 recent_match 表中的 日期单词拼错了 改成了m_date
let sql = `select * from(select m.m_id,m.self_name,birth,habitual_hand,match_count,win_count,win_rate,self_score,opponent_score,opponent_name,row_number()
let sql = `select * from(select m.m_id,m.self_name,birth,habitual_hand,match_count,win_count,win_rate,self_score,opponent_score,opponent_name,p_id,self_pic,row_number()
over(partition by m.self_name order by m.self_name asc) rn
from student s,recent_match m
where s.p_id=m.self_pid group by m.m_id,m.self_name,birth,habitual_hand,match_count,win_count,win_rate,self_score,opponent_score,opponent_name
where s.p_id=m.self_pid group by m.m_id,m.self_name,birth,habitual_hand,match_count,win_count,win_rate,self_score,opponent_score,opponent_name,p_id,self_pic
)t where rn <=5`;
//todo 这里的sql需要优化
let info = await selectOnceObjectData(sql);
let result = {
"基本信息": {
"出生日期": info.birth,
"惯用手": info.habitual_hand,
"比赛场次": info.match_count,
"胜场": info.win_count,
"胜率": info.win_rate
},
"近期比赛": {
"match":[
info.self_name,info.self_score,info.opponent_score,info.opponent_name
]
}
}
let resultData = "";
for (let i in result) {
resultData = result[i];
let selectList = await selectData(sql);
let result = [];//[{... list:[{}, {}, {}] }]
let distinctMap = {};
selectList.forEach(info => {
let {p_id, birth, habitual_hand, match_count, win_count, win_rate, self_name, self_score, opponent_score, opponent_name, m_id, self_pic} = info;
if (!distinctMap[p_id]) {
distinctMap[p_id] = {
"出生日期": birth,
"惯用手": habitual_hand,
"比赛场次": match_count,
"胜场": win_count,
"胜率": win_rate,
"mid":m_id,
"名称":self_name,
"img":self_pic,
"abbr":pyfl(self_name).substring(0,1),
list:[]
};
}
resultData = resultData.sort(
function compareFunction(item1, item2) {
distinctMap[p_id].list.push({
selfName:self_name,
selfScore:self_score,
opponentScore:opponent_score,
opponentName:opponent_name,
});
});
return item1.localeCompare(item2);
for (let mid in distinctMap) {
result.push(distinctMap[mid]);
}
)
return resultData;
result.sort( (a, b) => {return a.abbr - b.abbr});
return result;
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment