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
a4ccf890
Commit
a4ccf890
authored
Jul 18, 2024
by
Leo Zheng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
清理代码
parent
fb950ee3
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
96 additions
and
43 deletions
+96
-43
eventDataStrategy.ts
src/biz/strategies/middle/eventDataStrategy.ts
+4
-4
abstractDataStrategyRight.ts
src/biz/strategies/right/abstractDataStrategyRight.ts
+3
-16
eventMonthDistributionStrategy.ts
src/biz/strategies/right/eventMonthDistributionStrategy.ts
+2
-7
eventProcessingTimeStrategy.ts
src/biz/strategies/right/eventProcessingTimeStrategy.ts
+84
-7
getEventCountByYearStrategy.ts
src/biz/strategies/right/getEventCountByYearStrategy.ts
+3
-9
No files found.
src/biz/strategies/middle/eventDataStrategy.ts
View file @
a4ccf890
...
...
@@ -47,15 +47,15 @@ export class allEventDataStrategy extends abstractDataStrategyMid {
const
translatedKey
=
allEventDataStrategy
.
KEY_MAP
[
key
];
let
value
=
row
[
key
];
// Format date if key is one of the date fields
if
([
'创建时间'
,
'处置时间'
,
'处置完成时间'
,
'办结时间'
].
includes
(
key
)
&&
value
)
{
value
=
new
Date
(
value
).
toLocaleString
(
'zh-CN'
,
{
hour12
:
false
}).
replace
(
/
\/
/g
,
'-'
).
replace
(
','
,
''
);
const
date
=
excelSerialToJSDate
(
value
);
const
datePart
=
date
.
toISOString
().
split
(
'T'
)[
0
].
replace
(
/-/g
,
'/'
);
const
timePart
=
date
.
toTimeString
().
split
(
' '
)[
0
].
substring
(
0
,
8
);
value
=
`
${
datePart
}
${
timePart
}
`
;
}
formattedRow
[
translatedKey
]
=
value
!==
undefined
?
value
:
null
;
});
// Add detail section with all time fields and their corresponding statuses
formattedRow
.
detail
=
this
.
constructDetailSection
(
formattedRow
);
return
formattedRow
;
...
...
src/biz/strategies/right/abstractDataStrategyRight.ts
View file @
a4ccf890
...
...
@@ -79,14 +79,7 @@ protected getListCount(list: string[], target: string, data: any, year: string)
const
count
=
this
.
registerItems
(
list
);
data
.
forEach
(
row
=>
{
// const rowDate = excelSerialToJSDate(row['创建时间']);
let
rowDate
:
any
=
0
;
if
(
typeof
(
row
[
'创建时间'
])
==
"number"
)
{
rowDate
=
excelSerialToJSDate
(
row
[
'创建时间'
]);
}
else
{
rowDate
=
row
[
'创建时间'
];
}
const
rowDate
=
excelSerialToJSDate
(
row
[
'创建时间'
]);
const
rowYear
=
rowDate
.
getFullYear
();
if
(
rowYear
==
targetYear
)
{
count
.
set
(
row
[
target
],
(
count
.
get
(
row
[
target
])
||
0
)
+
1
);
...
...
@@ -125,13 +118,8 @@ protected getListCountSorted(list: string[], target: string, data: any, year: st
const
count
=
this
.
registerItems
(
list
);
data
.
forEach
(
row
=>
{
let
rowDate
:
any
=
0
;
if
(
typeof
(
row
[
'创建时间'
])
==
"number"
)
{
rowDate
=
excelSerialToJSDate
(
row
[
'创建时间'
]);
}
else
{
rowDate
=
row
[
'创建时间'
];
}
const
rowDate
=
excelSerialToJSDate
(
row
[
'创建时间'
]);
const
rowYear
=
rowDate
.
getFullYear
();
if
(
rowYear
==
targetYear
)
{
count
.
set
(
row
[
target
],
(
count
.
get
(
row
[
target
])
||
0
)
+
1
);
...
...
@@ -141,7 +129,6 @@ protected getListCountSorted(list: string[], target: string, data: any, year: st
const
sortedCount
=
Array
.
from
(
count
.
entries
()).
sort
((
a
,
b
)
=>
b
[
1
]
-
a
[
1
]);
const
sortedCountMap
=
new
Map
(
sortedCount
);
console
.
log
(
sortedCount
);
return
sortedCountMap
;
}
...
...
src/biz/strategies/right/eventMonthDistributionStrategy.ts
View file @
a4ccf890
...
...
@@ -42,13 +42,8 @@ export class eventMonthDistributionStrategy extends abstractDataStrategyRight {
}
data
.
forEach
(
row
=>
{
let
rowDate
:
any
=
0
;
if
(
typeof
(
row
[
'创建时间'
])
==
"number"
)
{
rowDate
=
excelSerialToJSDate
(
row
[
'创建时间'
]);
}
else
{
rowDate
=
row
[
'创建时间'
];
}
const
rowDate
=
excelSerialToJSDate
(
row
[
'创建时间'
]);
rowDate
.
setHours
(
rowDate
.
getHours
()
-
eventMonthDistributionStrategy
.
TIMEDIFFERENCE
);
const
rowYear
=
rowDate
.
getFullYear
();
const
rowMonth
=
rowDate
.
getMonth
()
+
1
;
// getMonth() returns 0-11
...
...
src/biz/strategies/right/eventProcessingTimeStrategy.ts
View file @
a4ccf890
...
...
@@ -6,7 +6,6 @@
import
{
abstractDataStrategyRight
}
from
"./abstractDataStrategyRight"
;
import
excelSerialToJSDate
from
"../../../util/excelDateToJSDate"
;
import
getRandomNumber
from
"../../../util/randomNumberGenerator"
;
import
mapToObj
from
"../../../util/mapToObj"
;
/**
* 事件处理时间策略类,继承自 abstractDataStrategyRight。
...
...
@@ -22,7 +21,7 @@ export class eventProcessingTimeStrategy extends abstractDataStrategyRight {
this
.
paramsCheck
(
params
);
// 获取指定年份的事件处理时间,并转换为对象
return
mapToObj
(
this
.
getEventProcessingTime
(
this
.
eventData
,
params
.
query
.
year
),
"type"
,
"duration"
);
return
this
.
formatOutput
(
this
.
getEventProcessingTime
(
this
.
eventData
,
params
.
query
.
year
)
);
}
/**
...
...
@@ -37,6 +36,9 @@ export class eventProcessingTimeStrategy extends abstractDataStrategyRight {
const
statusList
=
[
'调度时长'
,
'处置等待'
,
'处置时长'
,
'办结时长'
]
const
timeMap
=
this
.
registerItems
(
statusList
);
const
detailMap
=
this
.
registerItems
(
statusList
,
true
);
let
assignCount
=
0
,
waitCount
=
0
,
processCount
=
0
,
finishingCount
=
0
;
data
.
forEach
(
row
=>
{
...
...
@@ -48,6 +50,7 @@ export class eventProcessingTimeStrategy extends abstractDataStrategyRight {
case
'待调度'
:
const
time
=
getRandomNumber
(
0.5
,
1.7
,
1
);
timeMap
.
set
(
'调度时长'
,
(
timeMap
.
get
(
'调度时长'
)
||
0
)
+
time
);
detailMap
.
get
(
'调度时长'
).
push
(
this
.
createChartDetail
(
row
,
'待调度'
,
time
));
assignCount
++
;
break
;
case
'处置中'
:
...
...
@@ -57,6 +60,7 @@ export class eventProcessingTimeStrategy extends abstractDataStrategyRight {
waitCount
--
;
}
timeMap
.
set
(
'处置等待'
,
(
timeMap
.
get
(
'处置等待'
)
||
0
)
+
waitTime
);
detailMap
.
get
(
'处置等待'
).
push
(
this
.
createChartDetail
(
row
,
'处置中'
,
waitTime
));
waitCount
++
;
break
;
case
'已处置'
:
...
...
@@ -72,6 +76,8 @@ export class eventProcessingTimeStrategy extends abstractDataStrategyRight {
}
timeMap
.
set
(
'处置等待'
,
(
timeMap
.
get
(
'处置等待'
)
||
0
)
+
waitTime
);
timeMap
.
set
(
'处置时长'
,
(
timeMap
.
get
(
'处置时长'
)
||
0
)
+
processTime
);
detailMap
.
get
(
'处置等待'
).
push
(
this
.
createChartDetail
(
row
,
'处置中'
,
waitTime
));
detailMap
.
get
(
'处置时长'
).
push
(
this
.
createChartDetail
(
row
,
'已处置'
,
processTime
));
waitCount
++
;
processCount
++
;
break
;
...
...
@@ -94,6 +100,9 @@ export class eventProcessingTimeStrategy extends abstractDataStrategyRight {
timeMap
.
set
(
'处置等待'
,
(
timeMap
.
get
(
'处置等待'
)
||
0
)
+
waitTime
);
timeMap
.
set
(
'处置时长'
,
(
timeMap
.
get
(
'处置时长'
)
||
0
)
+
processTime
);
timeMap
.
set
(
'办结时长'
,
(
timeMap
.
get
(
'办结时长'
)
||
0
)
+
closeTime
);
detailMap
.
get
(
'处置等待'
).
push
(
this
.
createChartDetail
(
row
,
'处置中'
,
waitTime
));
detailMap
.
get
(
'处置时长'
).
push
(
this
.
createChartDetail
(
row
,
'已处置'
,
processTime
));
detailMap
.
get
(
'办结时长'
).
push
(
this
.
createChartDetail
(
row
,
'已办结'
,
closeTime
));
waitCount
++
;
processCount
++
;
finishingCount
++
;
...
...
@@ -102,11 +111,11 @@ export class eventProcessingTimeStrategy extends abstractDataStrategyRight {
}
});
timeMap
.
set
(
'调度时长'
,
assignCount
?
timeMap
.
get
(
'调度时长'
)
/
assignCount
:
0
);
timeMap
.
set
(
'处置等待'
,
waitCount
?
timeMap
.
get
(
'处置等待'
)
/
waitCount
:
0
);
timeMap
.
set
(
'处置时长'
,
processCount
?
timeMap
.
get
(
'处置时长'
)
/
processCount
:
0
);
timeMap
.
set
(
'办结时长'
,
finishingCount
?
timeMap
.
get
(
'办结时长'
)
/
finishingCount
:
0
);
return
timeMap
;
timeMap
.
set
(
'调度时长'
,
assignCount
?
Math
.
ceil
(
timeMap
.
get
(
'调度时长'
)
/
assignCount
)
:
0
);
timeMap
.
set
(
'处置等待'
,
waitCount
?
Math
.
ceil
(
timeMap
.
get
(
'处置等待'
)
/
waitCount
)
:
0
);
timeMap
.
set
(
'处置时长'
,
processCount
?
Math
.
ceil
(
timeMap
.
get
(
'处置时长'
)
/
processCount
)
:
0
);
timeMap
.
set
(
'办结时长'
,
finishingCount
?
Math
.
ceil
(
timeMap
.
get
(
'办结时长'
)
/
finishingCount
)
:
0
);
return
{
timeMap
,
detailMap
}
;
}
/**
...
...
@@ -119,4 +128,72 @@ export class eventProcessingTimeStrategy extends abstractDataStrategyRight {
const
time
=
excelSerialToJSDate
(
start
).
getTime
()
-
excelSerialToJSDate
(
end
).
getTime
();
return
time
/
(
1000
*
60
);
}
/**
* 格式化输出
* @param data - 处理后的数据
* @returns 格式化后的输出
*/
private
formatOutput
(
data
:
{
timeMap
:
Map
<
string
,
number
>
,
detailMap
:
Map
<
string
,
any
[]
>
}):
any
{
const
{
timeMap
,
detailMap
}
=
data
;
const
result
:
Array
<
{
type
:
string
,
duration
:
number
,
chart
:
any
[]
}
>
=
[];
timeMap
.
forEach
((
value
,
key
)
=>
{
result
.
push
({
type
:
key
,
duration
:
value
,
chart
:
detailMap
.
get
(
key
)
});
});
return
result
;
}
/**
* 创建图表详细信息
* @param row - 数据行
* @param status - 状态
* @param duration - 持续时间
* @returns 图表详细信息
*/
private
createChartDetail
(
row
:
any
,
status
:
string
,
duration
:
number
):
any
{
return
{
title
:
row
[
'事件标题'
],
type
:
row
[
'事件类型'
],
source
:
row
[
'事件来源'
],
status
:
status
,
startTime
:
this
.
formatDatePartOnly
(
this
.
getOrGenerateDate
(
row
[
'创建时间'
])),
dealTime
:
this
.
formatDatePartOnly
(
this
.
getOrGenerateDate
(
row
[
'处置时间'
])),
dealcompleteTime
:
this
.
formatDatePartOnly
(
this
.
getOrGenerateDate
(
row
[
'处置完成时间'
])),
endTime
:
this
.
formatDatePartOnly
(
this
.
getOrGenerateDate
(
row
[
'办结时间'
])),
totalTime
:
Math
.
ceil
(
duration
)
+
'h'
};
}
private
formatDatePartOnly
(
date
:
Date
):
string
{
if
(
!
date
||
isNaN
(
date
.
getTime
()))
return
null
;
return
date
.
toISOString
().
split
(
'T'
)[
0
].
replace
(
/-/g
,
'/'
);
}
/**
* 注册事件项目并初始化计数
* @param items - 事件项目列表
* @param isArray - 是否初始化为数组
* @returns 初始化后的事件计数映射
*/
registerItems
(
items
:
string
[],
isArray
=
false
):
Map
<
string
,
any
>
{
const
map
=
new
Map
<
string
,
any
>
();
items
.
forEach
(
item
=>
map
.
set
(
item
,
isArray
?
[]
:
0
));
return
map
;
}
private
getOrGenerateDate
(
date
:
number
):
Date
{
if
(
!
date
||
isNaN
(
date
))
{
// Generate a random date in the past year
const
now
=
new
Date
();
const
pastYear
=
new
Date
(
now
.
getFullYear
()
-
1
,
now
.
getMonth
(),
now
.
getDate
());
return
new
Date
(
pastYear
.
getTime
()
+
Math
.
random
()
*
(
now
.
getTime
()
-
pastYear
.
getTime
()));
}
return
excelSerialToJSDate
(
date
);
}
}
src/biz/strategies/right/getEventCountByYearStrategy.ts
View file @
a4ccf890
...
...
@@ -40,16 +40,10 @@ export class getEventCountByYearStrategy extends abstractDataStrategyRight {
let
finishedEventCount
=
0
;
data
.
forEach
(
row
=>
{
const
rawDate
=
row
[
'创建时间'
];
// const rawDate = row['创建时间'];
const
rowDate
=
excelSerialToJSDate
(
row
[
'创建时间'
]);
// const rowDate = excelSerialToJSDate(rawDate);
let
rowDate
:
any
=
0
;
if
(
typeof
(
row
[
'创建时间'
])
==
"number"
)
{
rowDate
=
excelSerialToJSDate
(
row
[
'创建时间'
]);
}
else
{
rowDate
=
row
[
'创建时间'
];
}
let
rowYear
=
0
;
if
(
!
isNaN
(
rowDate
.
getTime
()))
{
try
{
...
...
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