Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
shouzhouServer
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
chenjinjing
shouzhouServer
Commits
2e1b7cd1
Commit
2e1b7cd1
authored
Jul 11, 2024
by
Leo Zheng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
给左边部分的API增加注释
parent
176e3a5b
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
222 additions
and
58 deletions
+222
-58
getData.ts
src/biz/getData.ts
+20
-10
dataStrategy.ts
src/biz/strategies/dataStrategy.ts
+13
-3
abstractDataStrategyLeft.ts
src/biz/strategies/left/abstractDataStrategyLeft.ts
+16
-6
gateStatusStrategy.ts
src/biz/strategies/left/gateStatusStrategy.ts
+21
-4
guchengLoadStrategy.ts
src/biz/strategies/left/guchengLoadStrategy.ts
+14
-3
sightVisitorFlowByDayStrategy.ts
src/biz/strategies/left/sightVisitorFlowByDayStrategy.ts
+20
-1
sightVisitorFlowPerHourStrategy.ts
src/biz/strategies/left/sightVisitorFlowPerHourStrategy.ts
+21
-1
totalVisitorFlowByHourStrategy.ts
src/biz/strategies/left/totalVisitorFlowByHourStrategy.ts
+34
-8
totalVisitorFlowStrategy.ts
src/biz/strategies/left/totalVisitorFlowStrategy.ts
+20
-1
strategyFactory.ts
src/biz/strategies/strategyFactory.ts
+43
-21
No files found.
src/biz/getData.ts
View file @
2e1b7cd1
/**寿州古城智慧调度事件态势感知 */
/**
* getData.ts
* 该文件定义了用于处理请求并根据不同策略发送响应的函数。
*/
// 导入 strategyFactory,以便根据请求内容创建适当的策略。
import
{
strategyFactory
}
from
"./strategies/strategyFactory"
;
import
{
strategyFactory
}
from
"./strategies/strategyFactory"
;
/**
/**
*
主界面
*
处理获取数据的主要请求。
* @param req
* @param req
- 请求对象,包含查询参数。
* @param res
* @param res
- 响应对象,用于将结果发送回客户端。
*/
*/
export
function
getData
(
req
,
res
)
{
export
function
getData
(
req
,
res
)
{
const
strategy
=
strategyFactory
.
createStrategy
(
req
.
query
.
content
)
// 根据请求查询内容创建策略。
const
strategy
=
strategyFactory
.
createStrategy
(
req
.
query
.
content
);
// 使用请求参数执行策略并获取结果。
let
ret
=
strategy
.
execute
(
req
);
let
ret
=
strategy
.
execute
(
req
);
// 将结果发送回客户端。
res
.
send
(
ret
);
res
.
send
(
ret
);
}
}
/**
* 一个简单的测试函数,用于检查服务器是否正常工作。
* @param req - 请求对象。
* @param res - 响应对象。
*/
export
function
test
(
req
,
res
)
{
export
function
test
(
req
,
res
)
{
res
.
send
(
"Success!"
);
res
.
send
(
"Success!"
);
}
}
\ No newline at end of file
src/biz/strategies/dataStrategy.ts
View file @
2e1b7cd1
import
{
DataExtractor
}
from
"../../util/dataExtractor"
;
/**
* dataStrategy.ts
* 该文件定义了一个数据策略接口。
*/
/**
* 数据策略接口,所有具体策略类都需要实现该接口。
*/
export
interface
dataStrategy
{
export
interface
dataStrategy
{
/**
* 执行策略的方法。
* @param params - 可选参数。
* @returns 执行结果。
*/
execute
(
params
?:
any
):
any
;
execute
(
params
?:
any
):
any
;
}
}
\ No newline at end of file
src/biz/strategies/left/abstractDataStrategyLeft.ts
View file @
2e1b7cd1
/**
* abstractDataStrategyLeft.ts
* 该文件定义了一个抽象类,用于左侧数据策略的基础实现。
*/
import
{
dataStrategy
}
from
"../dataStrategy"
;
import
{
dataStrategy
}
from
"../dataStrategy"
;
import
{
DataExtractor
}
from
"../../../util/dataExtractor"
;
import
{
DataExtractor
}
from
"../../../util/dataExtractor"
;
/**
* 抽象数据策略左侧类,所有具体策略类都需要继承该抽象类。
*/
export
abstract
class
abstractDataStrategyLeft
implements
dataStrategy
{
export
abstract
class
abstractDataStrategyLeft
implements
dataStrategy
{
// 实例化数据提取器
extractor
=
DataExtractor
.
getInstance
();
extractor
=
DataExtractor
.
getInstance
();
static
readonly
FILENAME
=
'票务系统.xlsx'
;
static
readonly
FILENAME
=
'票务系统.xlsx'
;
static
readonly
SHEETNAME
=
'票务系统-订单主表'
;
static
readonly
SHEETNAME
=
'票务系统-订单主表'
;
static
readonly
TIMEDIFFERENCE
=
8
;
static
readonly
TIMEDIFFERENCE
=
8
;
execute
(
params
?:
any
):
any
{
/**
}
* 执行策略的方法,具体实现由子类提供。
* @param params - 可选参数。
}
*/
\ No newline at end of file
abstract
execute
(
params
?:
any
):
any
;
}
src/biz/strategies/left/gateStatusStrategy.ts
View file @
2e1b7cd1
/**
* gateStatusStrategy.ts
* 该文件定义了门状态策略的具体实现。
*/
import
{
randomStatusGenerator
}
from
"../../../util/randomStatusGenerator"
;
import
{
randomStatusGenerator
}
from
"../../../util/randomStatusGenerator"
;
import
mapToObj
from
"../../../util/mapToObj"
;
import
mapToObj
from
"../../../util/mapToObj"
;
import
{
abstractDataStrategyLeft
}
from
"./abstractDataStrategyLeft"
;
import
{
abstractDataStrategyLeft
}
from
"./abstractDataStrategyLeft"
;
/**
* 门状态策略类,继承自 abstractDataStrategyLeft。
*/
export
class
gateStatusStrategy
extends
abstractDataStrategyLeft
{
export
class
gateStatusStrategy
extends
abstractDataStrategyLeft
{
private
gateStatusMap
:
Map
<
string
,
string
>
=
new
Map
();
private
gateStatusMap
:
Map
<
string
,
string
>
=
new
Map
();
constructor
()
{
constructor
()
{
super
();
super
();
// 初始化门状态映射
this
.
gateStatusMap
.
set
(
'south'
,
''
);
this
.
gateStatusMap
.
set
(
'south'
,
''
);
this
.
gateStatusMap
.
set
(
'east'
,
''
);
this
.
gateStatusMap
.
set
(
'east'
,
''
);
this
.
gateStatusMap
.
set
(
'west'
,
''
);
this
.
gateStatusMap
.
set
(
'west'
,
''
);
this
.
gateStatusMap
.
set
(
'north'
,
''
);
this
.
gateStatusMap
.
set
(
'north'
,
''
);
}
}
/**
* 执行门状态策略,生成随机的门状态。
* @returns 门状态的对象表示。
*/
execute
():
any
{
execute
():
any
{
this
.
gateStatusMap
.
forEach
((
value
,
key
,
map
)
=>
{
this
.
gateStatusMap
.
forEach
((
value
,
key
,
map
)
=>
{
map
.
set
(
key
,
randomStatusGenerator
.
getRandomStatus
());
map
.
set
(
key
,
randomStatusGenerator
.
getRandomStatus
());
...
@@ -19,8 +34,11 @@ export class gateStatusStrategy extends abstractDataStrategyLeft {
...
@@ -19,8 +34,11 @@ export class gateStatusStrategy extends abstractDataStrategyLeft {
return
mapToObj
(
this
.
gateStatusMap
);
return
mapToObj
(
this
.
gateStatusMap
);
}
}
/**
* 获取门状态映射。
* @returns 门状态映射。
*/
getGateStatusMap
()
{
getGateStatusMap
()
{
return
this
.
gateStatusMap
;
return
this
.
gateStatusMap
;
}
}
}
}
\ No newline at end of file
src/biz/strategies/left/guchengLoadStrategy.ts
View file @
2e1b7cd1
/**
* guchengLoadStrategy.ts
* 该文件定义了古城负载状态策略的具体实现。
*/
import
{
randomStatusGenerator
}
from
"../../../util/randomStatusGenerator"
;
import
{
randomStatusGenerator
}
from
"../../../util/randomStatusGenerator"
;
import
{
abstractDataStrategyLeft
}
from
"./abstractDataStrategyLeft"
;
import
{
abstractDataStrategyLeft
}
from
"./abstractDataStrategyLeft"
;
/**
* 古城负载策略类,继承自 abstractDataStrategyLeft。
*/
export
class
guchengLoadStrategy
extends
abstractDataStrategyLeft
{
export
class
guchengLoadStrategy
extends
abstractDataStrategyLeft
{
/**
* 执行古城负载策略,生成随机的负载状态。
* @returns 随机的负载状态。
*/
execute
():
any
{
execute
():
any
{
return
randomStatusGenerator
.
getRandomStatus
();
return
randomStatusGenerator
.
getRandomStatus
();
}
}
}
}
\ No newline at end of file
src/biz/strategies/left/sightVisitorFlowByDayStrategy.ts
View file @
2e1b7cd1
/**
* sightVisitorFlowByDayStrategy.ts
* 该文件定义了按天计算的游客流量策略的具体实现。
*/
import
{
randomStatusGenerator
}
from
"../../../util/randomStatusGenerator"
;
import
{
randomStatusGenerator
}
from
"../../../util/randomStatusGenerator"
;
import
excelSerialToJSDate
from
"../../../util/excelDateToJSDate"
;
import
excelSerialToJSDate
from
"../../../util/excelDateToJSDate"
;
import
{
abstractDataStrategyLeft
}
from
"./abstractDataStrategyLeft"
;
import
{
abstractDataStrategyLeft
}
from
"./abstractDataStrategyLeft"
;
/**
* 按天计算的游客流量策略类,继承自 abstractDataStrategyLeft。
*/
export
class
sightVisitorFlowByDayStrategy
extends
abstractDataStrategyLeft
{
export
class
sightVisitorFlowByDayStrategy
extends
abstractDataStrategyLeft
{
/**
* 执行按天计算的游客流量策略。
* @param params - 请求参数,包含日期信息。
* @returns 每小时的游客流量映射。
*/
execute
(
params
?:
any
):
any
{
execute
(
params
?:
any
):
any
{
if
(
!
params
||
!
params
.
query
||
!
params
.
query
.
date
)
{
if
(
!
params
||
!
params
.
query
||
!
params
.
query
.
date
)
{
throw
new
Error
(
"Date parameter is required."
)
throw
new
Error
(
"Date parameter is required."
)
...
@@ -11,11 +24,17 @@ export class sightVisitorFlowByDayStrategy extends abstractDataStrategyLeft {
...
@@ -11,11 +24,17 @@ export class sightVisitorFlowByDayStrategy extends abstractDataStrategyLeft {
return
this
.
getVisitorFlowByDay
(
sightData
,
params
.
query
.
date
);
return
this
.
getVisitorFlowByDay
(
sightData
,
params
.
query
.
date
);
}
}
/**
* 获取指定日期所有景点的游客流量和景点状态。
* @param data - 从数据源提取的数据。
* @param date - 指定日期。
* @returns 每小时的游客流量映射。
*/
private
getVisitorFlowByDay
(
data
:
any
,
date
:
string
)
{
private
getVisitorFlowByDay
(
data
:
any
,
date
:
string
)
{
const
visitorCount
:
{
[
sight
:
string
]:
{
count
:
number
,
status
:
string
}
}
=
{};
const
visitorCount
:
{
[
sight
:
string
]:
{
count
:
number
,
status
:
string
}
}
=
{};
data
.
forEach
(
row
=>
{
data
.
forEach
(
row
=>
{
const
rowDate
=
excelSerialToJSDate
(
row
[
'游玩时间'
]);
const
rowDate
=
excelSerialToJSDate
(
row
[
'游玩时间'
]);
let
rowDateString
=
''
;
let
rowDateString
;
try
{
try
{
rowDateString
=
rowDate
.
toISOString
().
split
(
'T'
)[
0
];
rowDateString
=
rowDate
.
toISOString
().
split
(
'T'
)[
0
];
}
}
...
...
src/biz/strategies/left/sightVisitorFlowPerHourStrategy.ts
View file @
2e1b7cd1
/**
* sightVisitorFlowPerHourStrategy.ts
* 该文件定义了每小时计算的游客流量策略的具体实现,获取制定景点在指定日期的每小时游客流量。
*/
import
excelSerialToJSDate
from
"../../../util/excelDateToJSDate"
;
import
excelSerialToJSDate
from
"../../../util/excelDateToJSDate"
;
import
mapToObj
from
"../../../util/mapToObj"
;
import
mapToObj
from
"../../../util/mapToObj"
;
import
{
abstractDataStrategyLeft
}
from
"./abstractDataStrategyLeft"
;
import
{
abstractDataStrategyLeft
}
from
"./abstractDataStrategyLeft"
;
/**
* 每小时计算的游客流量策略类,继承自 abstractDataStrategyLeft。
*/
export
class
sightVisitorFlowByHourStrategy
extends
abstractDataStrategyLeft
{
export
class
sightVisitorFlowByHourStrategy
extends
abstractDataStrategyLeft
{
/**
* 执行每小时计算的游客流量策略。
* @param params - 请求参数,包含景点和日期信息。
* @returns 指定景点指定日期的每小时的游客流量映射。
*/
execute
(
params
?:
any
):
any
{
execute
(
params
?:
any
):
any
{
if
(
!
params
||
!
params
.
query
||
!
params
.
query
.
date
||
!
params
.
query
.
sight
)
{
if
(
!
params
||
!
params
.
query
||
!
params
.
query
.
date
||
!
params
.
query
.
sight
)
{
throw
new
Error
(
'Date and sight parameters are required.'
);
throw
new
Error
(
'Date and sight parameters are required.'
);
...
@@ -12,6 +25,13 @@ export class sightVisitorFlowByHourStrategy extends abstractDataStrategyLeft {
...
@@ -12,6 +25,13 @@ export class sightVisitorFlowByHourStrategy extends abstractDataStrategyLeft {
return
mapToObj
(
this
.
getVisitorFlowByHour
(
sightData
,
params
.
query
.
sight
,
params
.
query
.
date
));
return
mapToObj
(
this
.
getVisitorFlowByHour
(
sightData
,
params
.
query
.
sight
,
params
.
query
.
date
));
}
}
/**
* 获取指定日期的每小时游客流量。
* @param data - 从数据源提取的数据。
* @param date - 指定日期。
* @param sight - 指定景点。
* @returns 指定景点指定日期的每小时的游客流量映射。
*/
private
getVisitorFlowByHour
(
data
:
any
,
sight
:
string
,
date
:
string
)
{
private
getVisitorFlowByHour
(
data
:
any
,
sight
:
string
,
date
:
string
)
{
const
visitorCount
:
Map
<
number
,
number
>
=
new
Map
();
const
visitorCount
:
Map
<
number
,
number
>
=
new
Map
();
for
(
let
hour
=
0
;
hour
<
24
;
hour
++
)
{
for
(
let
hour
=
0
;
hour
<
24
;
hour
++
)
{
...
@@ -20,7 +40,7 @@ export class sightVisitorFlowByHourStrategy extends abstractDataStrategyLeft {
...
@@ -20,7 +40,7 @@ export class sightVisitorFlowByHourStrategy extends abstractDataStrategyLeft {
data
.
forEach
(
row
=>
{
data
.
forEach
(
row
=>
{
const
rowDate
=
excelSerialToJSDate
(
row
[
'游玩时间'
]);
const
rowDate
=
excelSerialToJSDate
(
row
[
'游玩时间'
]);
let
rowDateString
=
''
;
let
rowDateString
;
try
{
try
{
rowDateString
=
rowDate
.
toISOString
().
split
(
'T'
)[
0
];
rowDateString
=
rowDate
.
toISOString
().
split
(
'T'
)[
0
];
}
}
...
...
src/biz/strategies/left/totalVisitorFlowByHourStrategy.ts
View file @
2e1b7cd1
/**
* totalVisitorFlowByHourStrategy.ts
* 该文件定义了按小时计算的总游客流量策略的具体实现,获取指定日期整个景区的各类人群客流量分布
*/
import
excelSerialToJSDate
from
"../../../util/excelDateToJSDate"
;
import
excelSerialToJSDate
from
"../../../util/excelDateToJSDate"
;
import
mapToObj
from
"../../../util/mapToObj"
;
import
mapToObj
from
"../../../util/mapToObj"
;
import
{
abstractDataStrategyLeft
}
from
"./abstractDataStrategyLeft"
;
import
{
abstractDataStrategyLeft
}
from
"./abstractDataStrategyLeft"
;
/**
* 按小时计算的总游客流量策略类,继承自 abstractDataStrategyLeft。
*/
export
class
totalVisitorFlowByHourStrategy
extends
abstractDataStrategyLeft
{
export
class
totalVisitorFlowByHourStrategy
extends
abstractDataStrategyLeft
{
/**
* 执行按小时计算的总游客流量策略。
* @param params - 请求参数,包含日期信息。
* @returns 全景区各类每小时各类游客流量。
*/
execute
(
params
?:
any
):
any
{
execute
(
params
?:
any
):
any
{
if
(
!
params
||
!
params
.
query
||
!
params
.
query
.
date
)
{
if
(
!
params
||
!
params
.
query
||
!
params
.
query
.
date
)
{
throw
new
Error
(
'Date parameter is required.'
);
throw
new
Error
(
'Date parameter is required.'
);
...
@@ -13,15 +25,29 @@ export class totalVisitorFlowByHourStrategy extends abstractDataStrategyLeft {
...
@@ -13,15 +25,29 @@ export class totalVisitorFlowByHourStrategy extends abstractDataStrategyLeft {
return
mapToObj
(
this
.
getTotalVisitorFlowByHour
(
sightData
,
params
.
query
.
date
));
return
mapToObj
(
this
.
getTotalVisitorFlowByHour
(
sightData
,
params
.
query
.
date
));
}
}
/**
* 获取指定日期的每小时总游客流量。
* @param data - 从数据源提取的数据。
* @param date - 指定日期。
* @returns 全景区各类每小时各类游客流量。
*/
private
getTotalVisitorFlowByHour
(
data
:
any
,
date
:
string
)
{
private
getTotalVisitorFlowByHour
(
data
:
any
,
date
:
string
)
{
const
visitorCount
:
Map
<
number
,
number
>
=
new
Map
();
console
.
log
(
"here!"
);
for
(
let
hour
=
0
;
hour
<
24
;
hour
++
)
{
const
visitorCount
:
Map
<
string
,
Map
<
number
,
number
>>
=
new
Map
();
visitorCount
.
set
(
hour
,
0
);
visitorCount
.
set
(
'儿童'
,
new
Map
());
}
visitorCount
.
set
(
'其他'
,
new
Map
());
visitorCount
.
set
(
'学生'
,
new
Map
());
visitorCount
.
set
(
'老人'
,
new
Map
());
visitorCount
.
forEach
((
value
)
=>
{
for
(
let
hour
=
0
;
hour
<
24
;
hour
++
)
{
value
.
set
(
hour
,
0
);
}
});
data
.
forEach
(
row
=>
{
data
.
forEach
(
row
=>
{
const
rowDate
=
excelSerialToJSDate
(
row
[
'游玩时间'
]);
const
rowDate
=
excelSerialToJSDate
(
row
[
'游玩时间'
]);
let
rowDateString
=
''
;
let
rowDateString
;
try
{
try
{
rowDateString
=
rowDate
.
toISOString
().
split
(
'T'
)[
0
];
rowDateString
=
rowDate
.
toISOString
().
split
(
'T'
)[
0
];
}
}
...
@@ -32,9 +58,9 @@ export class totalVisitorFlowByHourStrategy extends abstractDataStrategyLeft {
...
@@ -32,9 +58,9 @@ export class totalVisitorFlowByHourStrategy extends abstractDataStrategyLeft {
rowDate
.
setHours
(
rowDate
.
getHours
()
-
8
);
rowDate
.
setHours
(
rowDate
.
getHours
()
-
8
);
const
rowHour
=
rowDate
.
getHours
();
const
rowHour
=
rowDate
.
getHours
();
if
(
rowDateString
==
date
)
{
if
(
rowDateString
==
date
)
{
visitorCount
.
set
(
rowHour
,
(
visitorCount
.
get
(
rowHour
)
||
0
)
+
1
);
visitorCount
.
set
(
row
[
'订单游客类型'
],
visitorCount
.
get
(
row
[
'订单游客类型'
]).
set
(
rowHour
,
(
visitorCount
.
get
(
row
[
'订单游客类型'
]).
get
(
rowHour
)
||
0
)
+
1
));
console
.
log
(
row
[
'订单游客类型'
],
'set!'
);
}
}
});
});
return
visitorCount
;
return
visitorCount
;
...
...
src/biz/strategies/left/totalVisitorFlowStrategy.ts
View file @
2e1b7cd1
/**
* totalVisitorFlowStrategy.ts
* 该文件定义了总游客流量策略的具体实现。
*/
import
excelSerialToJSDate
from
"../../../util/excelDateToJSDate"
;
import
excelSerialToJSDate
from
"../../../util/excelDateToJSDate"
;
import
mapToObj
from
"../../../util/mapToObj"
;
import
mapToObj
from
"../../../util/mapToObj"
;
import
{
abstractDataStrategyLeft
}
from
"./abstractDataStrategyLeft"
;
import
{
abstractDataStrategyLeft
}
from
"./abstractDataStrategyLeft"
;
/**
* 总游客流量策略类,继承自 abstractDataStrategyLeft。
*/
export
class
totalVisitorFlowStrategy
extends
abstractDataStrategyLeft
{
export
class
totalVisitorFlowStrategy
extends
abstractDataStrategyLeft
{
/**
* 执行总游客流量策略。
* @param params - 请求参数,包含日期信息。
* @returns 每小时的全景区各类游客流量。
*/
execute
(
params
?:
any
):
any
{
execute
(
params
?:
any
):
any
{
if
(
!
params
||
!
params
.
query
||
!
params
.
query
.
date
)
{
if
(
!
params
||
!
params
.
query
||
!
params
.
query
.
date
)
{
throw
new
Error
(
"Date parameter is required."
)
throw
new
Error
(
"Date parameter is required."
)
...
@@ -12,13 +25,19 @@ export class totalVisitorFlowStrategy extends abstractDataStrategyLeft {
...
@@ -12,13 +25,19 @@ export class totalVisitorFlowStrategy extends abstractDataStrategyLeft {
return
mapToObj
(
this
.
getTotalVisitorByDay
(
sightData
,
params
.
query
.
date
));
return
mapToObj
(
this
.
getTotalVisitorByDay
(
sightData
,
params
.
query
.
date
));
}
}
/**
* 获取指定日期的每小时总游客流量。
* @param data - 从数据源提取的数据。
* @param date - 指定日期。
* @returns 每小时的全景区各类游客流量。
*/
private
getTotalVisitorByDay
(
data
:
any
,
date
:
string
)
{
private
getTotalVisitorByDay
(
data
:
any
,
date
:
string
)
{
const
visitorCount
:
Map
<
string
,
number
>
=
new
Map
();
const
visitorCount
:
Map
<
string
,
number
>
=
new
Map
();
visitorCount
.
set
(
'total'
,
0
);
visitorCount
.
set
(
'total'
,
0
);
data
.
forEach
(
row
=>
{
data
.
forEach
(
row
=>
{
const
rowDate
=
excelSerialToJSDate
(
row
[
'游玩时间'
]);
const
rowDate
=
excelSerialToJSDate
(
row
[
'游玩时间'
]);
let
rowDateString
=
''
;
let
rowDateString
;
try
{
try
{
rowDateString
=
rowDate
.
toISOString
().
split
(
'T'
)[
0
];
rowDateString
=
rowDate
.
toISOString
().
split
(
'T'
)[
0
];
}
}
...
...
src/biz/strategies/strategyFactory.ts
View file @
2e1b7cd1
import
{
dataStrategy
}
from
"./dataStrategy"
;
/**
* strategyFactory.ts
* 该文件定义了策略工厂类,用于创建各种数据策略。
*/
import
{
sightVisitorFlowByDayStrategy
}
from
"./left/sightVisitorFlowByDayStrategy"
;
import
{
dataStrategy
}
from
"./dataStrategy"
;
import
{
gateStatusStrategy
}
from
"./left/gateStatusStrategy"
;
import
{
sightVisitorFlowByHourStrategy
}
from
"./left/sightVisitorFlowPerHourStrategy"
;
import
{
guchengLoadStrategy
}
from
"./left/guchengLoadStrategy"
;
import
{
totalVisitorFlowStrategy
}
from
"./left/totalVisitorFlowStrategy"
;
import
{
totalVisitorFlowByHourStrategy
}
from
"./left/totalVisitorFlowByHourStrategy"
;
import
{
currentEventStrategy
}
from
"./middle/currentEventStrategy"
;
// 导入具体策略类
import
{
totalEventCountStrategy
}
from
"./middle/totalEventCountStrategy"
;
import
{
sightVisitorFlowByDayStrategy
}
from
"./left/sightVisitorFlowByDayStrategy"
;
import
{
allEventDataStrategy
}
from
"./middle/eventDataStrategy"
;
import
{
gateStatusStrategy
}
from
"./left/gateStatusStrategy"
;
import
{
sightVisitorFlowByHourStrategy
}
from
"./left/sightVisitorFlowPerHourStrategy"
;
import
{
guchengLoadStrategy
}
from
"./left/guchengLoadStrategy"
;
import
{
totalVisitorFlowStrategy
}
from
"./left/totalVisitorFlowStrategy"
;
import
{
totalVisitorFlowByHourStrategy
}
from
"./left/totalVisitorFlowByHourStrategy"
;
import
{
currentEventStrategy
}
from
"./middle/currentEventStrategy"
;
import
{
totalEventCountStrategy
}
from
"./middle/totalEventCountStrategy"
;
import
{
getEventCountByYearStrategy
}
from
"./right/getEventCountByYearStrategy"
;
import
{
getEventCountByYearStrategy
}
from
"./right/getEventCountByYearStrategy"
;
import
{
eventTimeDistributionStrategy
}
from
"./right/eventTimeDistributionStrategy"
;
import
{
eventTimeDistributionStrategy
}
from
"./right/eventTimeDistributionStrategy"
;
import
{
eventMonthDistributionStrategy
}
from
"./right/eventMonthDistributionStrategy"
;
import
{
eventMonthDistributionStrategy
}
from
"./right/eventMonthDistributionStrategy"
;
import
{
eventCategoryCountStrategy
}
from
"./right/eventCategoryCountStrategy"
;
import
{
eventCategoryCountStrategy
}
from
"./right/eventCategoryCountStrategy"
;
import
{
eventSubCategoryCountStrategy
}
from
"./right/eventSubCategoryCountStrategy"
;
import
{
eventSubCategoryCountStrategy
}
from
"./right/eventSubCategoryCountStrategy"
;
import
{
eventSrcStrategy
}
from
"./right/eventSrcStrategy"
;
import
{
eventSrcStrategy
}
from
"./right/eventSrcStrategy"
;
import
{
gridEventCountStrategy
}
from
"./right/gridEventCountStrategy"
;
import
{
gridEventCountStrategy
}
from
"./right/gridEventCountStrategy"
;
import
{
eventProcessingTimeStrategy
}
from
"./right/eventProcessingTimeStrategy"
;
import
{
eventProcessingTimeStrategy
}
from
"./right/eventProcessingTimeStrategy"
;
import
{
allEventDataStrategy
}
from
"./middle/eventDataStrategy"
;
/**
* 策略工厂类,用于创建和管理各种数据策略。
*/
export
class
strategyFactory
{
export
class
strategyFactory
{
/**
* 存储策略类型与其对应类的映射。
*/
private
static
strategies
:
{
[
key
:
string
]:
new
()
=>
dataStrategy
}
=
{
private
static
strategies
:
{
[
key
:
string
]:
new
()
=>
dataStrategy
}
=
{
'allEvents'
:
allEventDataStrategy
,
'allEvents'
:
allEventDataStrategy
,
'sightVisitorFlowByDay'
:
sightVisitorFlowByDayStrategy
,
'sightVisitorFlowByDay'
:
sightVisitorFlowByDayStrategy
,
...
@@ -41,16 +53,27 @@ export class strategyFactory {
...
@@ -41,16 +53,27 @@ export class strategyFactory {
'getEventProcessingTime'
:
eventProcessingTimeStrategy
,
'getEventProcessingTime'
:
eventProcessingTimeStrategy
,
};
};
/**
* 创建并返回指定类型的策略实例。
* @param type - 策略类型的字符串标识。
* @returns 创建的策略实例。
* @throws 如果策略类型无效则抛出错误。
*/
static
createStrategy
(
type
:
string
):
dataStrategy
{
static
createStrategy
(
type
:
string
):
dataStrategy
{
const
StrategyClass
=
this
.
strategies
[
type
];
const
StrategyClass
=
this
.
strategies
[
type
];
console
.
log
(
type
,
'created!'
);
if
(
!
StrategyClass
)
{
if
(
!
StrategyClass
)
{
throw
new
Error
(
'Invalid strategy type.'
);
throw
new
Error
(
'Invalid strategy type.'
);
}
}
return
new
StrategyClass
();
return
new
StrategyClass
();
}
}
/**
* 注册一个新的策略。
* @param type - 策略类型的字符串标识。
* @param strategy - 策略类。
*/
static
registerStrategy
(
type
:
string
,
strategy
:
new
()
=>
dataStrategy
)
{
static
registerStrategy
(
type
:
string
,
strategy
:
new
()
=>
dataStrategy
)
{
this
.
strategies
[
type
]
=
strategy
;
this
.
strategies
[
type
]
=
strategy
;
}
}
}
}
\ 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