Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
sportsschoolserver
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
node_server
sportsschoolserver
Commits
fdc7166a
Commit
fdc7166a
authored
Nov 08, 2021
by
lixinming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
no message
parent
1ac763f5
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
283 additions
and
100 deletions
+283
-100
xsxxfx.ts
src/biz/xsxxfx.ts
+104
-19
xsxxfxData.ts
src/data/xsxxfxData.ts
+166
-79
router.ts
src/routers/router.ts
+13
-2
No files found.
src/biz/xsxxfx.ts
View file @
fdc7166a
import
{
info
}
from
"console"
;
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"
;
export
function
getData
(
req
,
res
)
{
export
async
function
getData
(
req
,
res
)
{
let
ret
:
any
=
{};
let
excelData
:
any
=
get
选手详细分析
()
;
let
{
pid
}
=
req
.
query
;
let
基础信息
DataAndUnit
=
objKeyReplace
(
excelData
.
基础信息
);
ret
[
"api1"
]
=
getKeyValue
(
"基础信息"
,
基础信息
DataAndUnit
.
dataMap
,
基础信息
DataAndUnit
.
unitMap
,
false
,
false
);
let
baseInfo
:
any
=
await
getBaseData
(
pid
);
let
技术特点评分
DataAndUnit
=
objKeyReplace
(
excelData
.
技术特点评分
);
ret
[
"
api2"
]
=
getKeyValue
(
"技术特点评分"
,
技术特点评分
DataAndUnit
.
dataMap
,
技术特点评分
DataAndUnit
.
unitMap
,
false
,
false
);
let
基础信息
DataAndUnit
=
objKeyReplace
(
baseInfo
.
基础信息
);
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
.
比赛视频
);
ret
[
"
api4"
]
=
getKeyValue
(
"比赛视频"
,
比赛视频
DataAndUnit
.
dataMap
,
比赛视频
DataAndUnit
.
unitMap
,
false
,
false
)
;
let
jqbsglInfo
=
await
近期比赛概览
(
pid
,
null
);
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
.
攻击落点
);
ret
[
"api9"
]
=
getKeyValue
(
"攻击落点"
,
攻击落点
DataAndUnit
.
dataMap
,
攻击落点
DataAndUnit
.
unitMap
,
false
,
false
);
async
function
近期比赛概览
(
pid
,
inTime
)
{
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
.
防守落点
);
ret
[
"api10"
]
=
getKeyValue
(
"防守落点"
,
防守落点
DataAndUnit
.
dataMap
,
防守落点
DataAndUnit
.
unitMap
,
false
,
false
);
async
function
图表分析数据
(
mid
,
rid
,
gid
)
{
let
图表数据
=
await
get
图表
(
mid
,
rid
,
gid
);
let
散点数据
=
await
get
散点图
(
mid
,
rid
,
gid
);
let
选手站位热力发布
DataAndUnit
=
objKeyReplace
(
excelData
.
选手站位热力发布
);
ret
[
"api11"
]
=
getKeyValue
(
"选手站位热力发布"
,
选手站位热力发布
DataAndUnit
.
dataMap
,
选手站位热力发布
DataAndUnit
.
unitMap
,
false
,
false
);
return
{
"左侧爆发能量"
:
图表数据
[
"左侧爆发能量"
],
"右侧爆发能量"
:
图表数据
[
"右侧爆发能量"
],
"左侧球移动速度"
:
图表数据
[
"左侧球移动速度"
],
"右侧球移动速度"
:
图表数据
[
"右侧球移动速度"
],
"散点数据"
:
散点数据
}
}
src/data/xsxxfxData.ts
View file @
fdc7166a
import
{
selectData
,
selectOnceObjectData
}
from
"./orcaleInterface"
;
const
percentStr
=
'&%'
;
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
()
{
export
async
function
getBaseData
(
id
)
{
let
result
=
{};
for
(
let
dataName
in
sqlKeyValueConfig
)
{
let
{
sql
,
analysis
,
haveUnit
}
=
sqlKeyValueConfig
[
dataName
]
;
let
selectResult
=
await
selectOnceObjectData
(
sql
)
;
let
sql
=
'select * from students_detail where pid=Placeholder1'
;
let
baseObj
=
{
"img"
:
"self_pic"
,
"姓名"
:
"name"
,
"性别"
:
"sex"
,
"英语名字"
:
"en_name"
,
"主教练"
:
"coach"
,
"出生年份"
:
"birth"
,
"身高"
:
"height"
,
"体重"
:
"weight"
,
"比赛场次"
:
"match_count"
,
"胜场"
:
"win_count"
,
"胜率"
:
"win_rate&%"
,
"排名"
:
"rank"
,
"惯用手"
:
"habitual_hand"
}
;
let
scoreObj
=
{
"击球速度"
:
"hit_speed"
,
"击球力量"
:
"hit_power"
,
"正手能力"
:
"forehand"
,
"反手能力"
:
"backhand"
,
"得分率"
:
"score_rate&%"
}
;
let
onceData
:
any
=
{};
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
selectResult
=
await
selectOnceObjectData
(
sql
,
id
);
let
onceData
=
[];
if
(
analysis
)
{
//填充特化字段逻辑
}
else
onceData
=
onceData
.
concat
(
selectResult
);
let
baseData
=
{};
for
(
let
key
in
baseObj
)
{
let
configKey
=
baseObj
[
key
];
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
;
...
...
@@ -91,28 +38,167 @@ function checkUnit(str, data, allUnit?) {
}
async
function
get
基础信息
()
{
}
async
function
get
技术特点评分
()
{
export
async
function
get
近期比赛概览
(
pid
,
checkDate
)
{
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
比赛视频
()
{
}
async
function
get
左侧爆发能量
()
{
export
async
function
get
单前比赛对局时间节点
(
mid
)
{
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
src/routers/router.ts
View file @
fdc7166a
...
...
@@ -3,11 +3,21 @@ import * as ydyglBiz from '../biz/ydygl';
import
*
as
xsxxfxBiz
from
'../biz/xsxxfx'
;
export
function
setRouter
(
httpServer
){
httpServer
.
get
(
'/ydygl'
,
asyncHandler
(
ydyglBiz
.
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
.
post
(
'/ydygl'
,
asyncHandler
(
ydyglBiz
.
getData
));
httpServer
.
post
(
'/xsxxfx'
,
asyncHandler
(
xsxxfxBiz
.
getData
));
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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment