Commit 33fb4275 by lixinming

no message

parent 7703d859
...@@ -986,6 +986,11 @@ ...@@ -986,6 +986,11 @@
"resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz", "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz",
"integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=" "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": { "qs": {
"version": "6.5.2", "version": "6.5.2",
"resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz", "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz",
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
"node-xlsx": "^0.16.1", "node-xlsx": "^0.16.1",
"nodemailer": "^6.1.1", "nodemailer": "^6.1.1",
"oracledb": "^5.3.0", "oracledb": "^5.3.0",
"pyfl": "^1.1.4",
"request": "^2.88.0", "request": "^2.88.0",
"svg-captcha": "^1.3.12", "svg-captcha": "^1.3.12",
"ws": "^5.2.2" "ws": "^5.2.2"
......
import { get运动员概览 } from "../data/analysisData"; 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"; import { getChartData, objKeyReplace, getKeyValue, getSingleYAndMoreData, getListData } 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 dataInfo:any = get运动员概览();
let 左上数据DataAndUnit = objKeyReplace(excelData.左上数据); let 左上数据DataAndUnit = objKeyReplace(dataInfo.左上数据);
ret["api1"] = getKeyValue("左上数据", 左上数据DataAndUnit.dataMap, 左上数据DataAndUnit.unitMap, false, false ); ret["api1"] = getKeyValue("左上数据", 左上数据DataAndUnit.dataMap, 左上数据DataAndUnit.unitMap, false, false );
let 运动员年龄分布DataAndUnit = objKeyReplace(dataInfo.运动员年龄分布);
let 运动员年龄分布DataAndUnit = objKeyReplace(excelData.运动员年龄分布);
ret["api2"] = getKeyValue("运动员年龄分布", 运动员年龄分布DataAndUnit.dataMap, 运动员年龄分布DataAndUnit.unitMap, false, false ); ret["api2"] = getKeyValue("运动员年龄分布", 运动员年龄分布DataAndUnit.dataMap, 运动员年龄分布DataAndUnit.unitMap, false, false );
let 运动员性别占比DataAndUnit = objKeyReplace(dataInfo.运动员性别占比);
let 运动员性别占比DataAndUnit = objKeyReplace(excelData.运动员性别占比);
ret["api3"] = getKeyValue("运动员性别占比", 运动员性别占比DataAndUnit.dataMap, 运动员性别占比DataAndUnit.unitMap, false, false ); ret["api3"] = getKeyValue("运动员性别占比", 运动员性别占比DataAndUnit.dataMap, 运动员性别占比DataAndUnit.unitMap, false, false );
let 训练类型DataAndUnit = objKeyReplace(dataInfo.训练类型);
let 训练类型DataAndUnit = objKeyReplace(excelData.训练类型);
ret["api4"] = getKeyValue("训练类型", 训练类型DataAndUnit.dataMap, 训练类型DataAndUnit.unitMap, false, false ); ret["api4"] = getKeyValue("训练类型", 训练类型DataAndUnit.dataMap, 训练类型DataAndUnit.unitMap, false, false );
let 动作模型练习DataAndUnit = objKeyReplace(dataInfo.动作模型练习);
let 动作模型练习DataAndUnit = objKeyReplace(excelData.动作模型练习);
ret["api5"] = getKeyValue("动作模型练习", 动作模型练习DataAndUnit.dataMap, 动作模型练习DataAndUnit.unitMap, false, false ); ret["api5"] = getKeyValue("动作模型练习", 动作模型练习DataAndUnit.dataMap, 动作模型练习DataAndUnit.unitMap, false, false );
let 右上数据DataAndUnit = objKeyReplace(dataInfo.右上数据);
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 ); ret["api9"] = getKeyValue("右上数据", 右上数据DataAndUnit.dataMap, 右上数据DataAndUnit.unitMap, false, false );
let 比赛类型DataAndUnit = objKeyReplace(dataInfo.比赛类型);
let 比赛类型DataAndUnit = objKeyReplace(excelData.比赛类型);
ret["api10"] = getKeyValue("比赛类型", 比赛类型DataAndUnit.dataMap, 比赛类型DataAndUnit.unitMap, false, false ); ret["api10"] = getKeyValue("比赛类型", 比赛类型DataAndUnit.dataMap, 比赛类型DataAndUnit.unitMap, false, false );
let 参赛性别占比DataAndUnit = objKeyReplace(dataInfo.参赛性别占比);
let 参赛性别占比DataAndUnit = objKeyReplace(excelData.参赛性别占比);
ret["api11"] = getKeyValue("参赛性别占比", 参赛性别占比DataAndUnit.dataMap, 参赛性别占比DataAndUnit.unitMap, false, false ); 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["api8"] = getListData("训练成绩优秀榜", dataInfo.训练成绩优秀榜, ["排名","照片","成绩","姓名"], {"排名":"rank","照片":"self_pic","成绩":"grade","姓名":"p_name"} );
let {maleAndFemale, countMap} = await get男女训练成绩对比();
ret["api6"] = getSingleYAndMoreData("男女训练成绩对比", maleAndFemale, false, false );
ret["api7"] = getChartData("月训练量趋势", countMap, false, false );
ret["api14"] = getListData("基本信息", excelData.基本信息, ["球员", "球员得分", "对手得分", "对手", "胜负"], {"球员":"selfName", "球员得分":"selfScore", "对手得分":"opponentScore", "对手":"oppenentName", "胜负":"winorlose"} ); 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["api12"] = await 基础数据();
//ret["api11"] = getListData("近期比赛", excelData.近期比赛, ["学员1","比分","场次","胜/平/负","积分"], false, false );
res.send(ret); res.send(ret);
...@@ -55,11 +45,10 @@ export function getData(req, res) { ...@@ -55,11 +45,10 @@ export function getData(req, res) {
//淘汰赛积分赛接口 //淘汰赛积分赛接口
export async function getCompetition(req, res) { export async function getCompetition(req, res) {
let type = 1; let { time, type } = req.query;
let time = 1;
let data = await get积分赛淘汰赛数据(time, type); let data = await get积分赛淘汰赛数据(time, type);
let ret:any = {}; let ret:any = {};
let dataName = type == 1 ? "淘汰赛" : "校内积分赛"; 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); res.send(ret);
} }
...@@ -42,8 +42,6 @@ const sqlKeyValueConfig = { ...@@ -42,8 +42,6 @@ const sqlKeyValueConfig = {
analysis:{ "男":"male", "女":"female" }, analysis:{ "男":"male", "女":"female" },
haveUnit:"&%" haveUnit:"&%"
} }
}; };
const sqlListConfig = { const sqlListConfig = {
"训练成绩优秀榜":{ "训练成绩优秀榜":{
...@@ -51,7 +49,7 @@ const sqlListConfig = { ...@@ -51,7 +49,7 @@ const sqlListConfig = {
} }
}; };
export async function getData() { export async function get运动员概览() {
let result = {}; let result = {};
...@@ -94,40 +92,59 @@ function checkUnit(str, data, allUnit?) { ...@@ -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) { export async function get积分赛淘汰赛数据(time, type) {
//这里要单独做,切换时间的时候有个接口,直接调用这个就可以 根据时间和类型来拼sql 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 sql = 'select * from points_competition';
let selectResult = await selectData(sql);
return selectResult;
}
//todo 少了一张表 let list = [];
async function 男女训练成绩对比() {
let sql = "select * from train_month_sex"; selectResult.forEach(info => {
let info = await selectData(sql); let {rank, p_name, game_count, win, lose, points} = info;
let result = { list.push({
"月份":info.month_sex, rank,
"女":info.female, p_name:p_name,
"男":info.male gameCount:game_count,
} win,
return result; lose,
points
});
});
return list;
} }
//todo 同上
async function 月训练量趋势() {
export async function get男女训练成绩对比() {
let sql = "select * from train_month_sex"; let sql = "select * from train_month_sex";
let info = await selectData(sql); let selectResult = await selectData(sql);
let result = {
"月份":info.month_sex, let maleAndFemale = {};// {"男":[{key:"1月", value:男值 }], "女":[{key:"1月", value:女值 }]}
"女":info.female, let countMap = {};// {"1月":总和, }
"男":info.male selectResult.forEach(info => {
} let {month_sex, female, male} = info;
return result; 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 学员库() { export async function 学员库() {
let sql = "select p_name from student"; let sql = "select p_name from student";
...@@ -142,43 +159,49 @@ export async function 学员库() { ...@@ -142,43 +159,49 @@ export async function 学员库() {
} }
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 over(partition by m.self_name order by m.self_name asc) rn
from student s,recent_match m 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`; )t where rn <=5`;
//todo 这里的sql需要优化
let info = await selectOnceObjectData(sql); let selectList = await selectData(sql);
let result = {
"基本信息": { let result = [];//[{... list:[{}, {}, {}] }]
"出生日期": info.birth, let distinctMap = {};
"惯用手": info.habitual_hand, selectList.forEach(info => {
"比赛场次": info.match_count, 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;
"胜场": info.win_count, if (!distinctMap[p_id]) {
"胜率": info.win_rate distinctMap[p_id] = {
}, "出生日期": birth,
"近期比赛": { "惯用手": habitual_hand,
"match":[ "比赛场次": match_count,
info.self_name,info.self_score,info.opponent_score,info.opponent_name "胜场": win_count,
] "胜率": win_rate,
"mid":m_id,
"名称":self_name,
"img":self_pic,
"abbr":pyfl(self_name).substring(0,1),
list:[]
};
} }
distinctMap[p_id].list.push({
selfName:self_name,
selfScore:self_score,
opponentScore:opponent_score,
opponentName:opponent_name,
});
});
for (let mid in distinctMap) {
result.push(distinctMap[mid]);
} }
let resultData = "";
for (let i in result) {
resultData = result[i];
}
resultData = resultData.sort(
function compareFunction(item1, item2) {
return item1.localeCompare(item2); result.sort( (a, b) => {return a.abbr - b.abbr});
}
)
return resultData; 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