Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
T
traffic-signal-platform
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
signal
traffic-signal-platform
Commits
85336f67
Commit
85336f67
authored
Dec 24, 2024
by
duanruiming
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
428f9506
2c7f0154
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
496 additions
and
16 deletions
+496
-16
RunningPlanServiceImpl.java
...wanji/web/service/scheme/impl/RunningPlanServiceImpl.java
+3
-0
EsDateIndexUtil.java
...e/src/main/java/net/wanji/opt/common/EsDateIndexUtil.java
+239
-0
TimeGranularityEnum.java
.../java/net/wanji/opt/common/enums/TimeGranularityEnum.java
+56
-0
GreenwaveHistRestServer.java
...ava/net/wanji/opt/controller/GreenwaveHistRestServer.java
+28
-2
GreenwaveHistoryMapper.java
...java/net/wanji/opt/dao/mapper/GreenwaveHistoryMapper.java
+8
-0
GreenwaveHistProvider.java
...ain/java/net/wanji/opt/service/GreenwaveHistProvider.java
+12
-0
GreenwaveHistProviderImpl.java
...net/wanji/opt/service/impl/GreenwaveHistProviderImpl.java
+93
-9
GreenwaveHistMapper.xml
...service/src/main/resources/mapper/GreenwaveHistMapper.xml
+50
-3
ScheduleUtil.java
...c/main/java/net/wanji/common/utils/tool/ScheduleUtil.java
+1
-1
CrossTurnDataRealtimePO.java
...in/java/net/wanji/databus/po/CrossTurnDataRealtimePO.java
+6
-1
No files found.
signal-control-service/src/main/java/net/wanji/web/service/scheme/impl/RunningPlanServiceImpl.java
View file @
85336f67
...
@@ -131,6 +131,9 @@ public class RunningPlanServiceImpl implements RunningPlanService {
...
@@ -131,6 +131,9 @@ public class RunningPlanServiceImpl implements RunningPlanService {
execListElement
.
setWeek
(
week
);
execListElement
.
setWeek
(
week
);
execListElement
.
setSpecialDateList
(
specialDateList
);
execListElement
.
setSpecialDateList
(
specialDateList
);
BaseCrossPlanPO
baseCrossPlanPO
=
baseCrossPlanMapper
.
selectById
(
planId
);
BaseCrossPlanPO
baseCrossPlanPO
=
baseCrossPlanMapper
.
selectById
(
planId
);
if
(
ObjectUtil
.
isEmpty
(
baseCrossPlanPO
)){
continue
;
}
execListElement
.
setPlanName
(
baseCrossPlanPO
.
getName
());
execListElement
.
setPlanName
(
baseCrossPlanPO
.
getName
());
execListElement
.
setPlanId
(
baseCrossPlanPO
.
getId
());
execListElement
.
setPlanId
(
baseCrossPlanPO
.
getId
());
execList
.
add
(
execListElement
);
execList
.
add
(
execListElement
);
...
...
signal-optimize-service/src/main/java/net/wanji/opt/common/EsDateIndexUtil.java
0 → 100644
View file @
85336f67
package
net
.
wanji
.
opt
.
common
;
import
net.wanji.common.gts.Tools
;
import
net.wanji.opt.common.enums.TimeGranularityEnum
;
import
org.apache.commons.io.FileUtils
;
import
org.apache.commons.io.filefilter.FileFilterUtils
;
import
org.apache.commons.io.filefilter.IOFileFilter
;
import
org.joda.time.DateTime
;
import
org.joda.time.Days
;
import
org.joda.time.Hours
;
import
org.joda.time.Minutes
;
import
org.joda.time.Months
;
import
java.io.File
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.Set
;
import
java.util.TreeSet
;
import
java.util.stream.Collectors
;
public
class
EsDateIndexUtil
{
public
static
final
String
YMDHM_FORMATTER
=
"yyyyMMddHHmm"
;
public
static
final
String
YMDHMSFORMATTER
=
"yyyyMMddHHmmss"
;
public
static
final
String
YMD_HM_FORMATTER
=
"yyyy-MM-dd HH:mm:00"
;
public
static
final
String
YMD_H_FORMATTER
=
"yyyyMMddHH"
;
public
static
final
String
YMD_FORMATTER
=
"yyyyMMdd"
;
public
static
final
String
YM_FORMATTER
=
"yyyyMM"
;
public
static
final
String
HMS_FORMATTER
=
"HH:mm:ss"
;
public
static
final
String
HMS_SSS_FORMATTER
=
"HH:mm:ss SSS"
;
public
static
final
String
HM_FORMATTER
=
"HH:mm"
;
public
static
final
String
H_FORMATTER
=
"HH"
;
private
static
final
String
FORMATSTR
=
"%s_%s"
;
/**
* 根据开始结束时间获取不同时间粒度的时刻点
*
* @param start 开始时间戳
* @param end 截止时间戳
* @param timeGranularityEnum 时间枚举类型
* @return
*/
public
static
List
<
String
>
getTimeScopeList
(
DateTime
start
,
DateTime
end
,
TimeGranularityEnum
timeGranularityEnum
,
String
dateFormat
)
{
List
<
String
>
indexList
=
new
ArrayList
<>();
int
diffNum
=
Minutes
.
minutesBetween
(
start
,
end
).
getMinutes
();
int
unitTime
=
0
;
String
DATE_FORMAT
=
YMD_HM_FORMATTER
;
if
(
Objects
.
equals
(
TimeGranularityEnum
.
FIVE_MINUTE
,
timeGranularityEnum
))
{
unitTime
=
5
;
}
else
if
(
Objects
.
equals
(
TimeGranularityEnum
.
FIFTEEN_MINUTE
,
timeGranularityEnum
))
{
unitTime
=
15
;
}
else
if
(
Objects
.
equals
(
TimeGranularityEnum
.
THIRTY_MINUTE
,
timeGranularityEnum
))
{
unitTime
=
30
;
}
else
if
(
Objects
.
equals
(
TimeGranularityEnum
.
ONE_HOUR
,
timeGranularityEnum
))
{
unitTime
=
60
;
}
for
(
int
i
=
0
;
i
<=
diffNum
;
i
=
i
+
unitTime
)
{
String
format
=
start
.
plusMinutes
(
i
).
toString
(
dateFormat
);
indexList
.
add
(
format
);
}
return
indexList
;
}
/**
* 根据开始结束时间匹配对应索引
*
* @param indexName 索引前缀
* @param startTime 开始时间戳
* @param endTime 截止时间戳
* @param timeType 1:分钟 2:小时 3:天 4:月
* @return
*/
public
static
String
[]
getIndexByTime
(
String
indexName
,
long
startTime
,
long
endTime
,
String
timeType
)
{
List
<
String
>
indexList
=
new
ArrayList
<>();
DateTime
start
=
new
DateTime
(
startTime
);
DateTime
end
=
new
DateTime
(
endTime
);
int
diffNum
=
0
;
//push单位秒
int
unitTime
=
0
;
String
DATE_FORMAT
=
null
;
if
(
Objects
.
equals
(
"1"
,
timeType
))
{
DATE_FORMAT
=
YMDHM_FORMATTER
;
diffNum
=
Minutes
.
minutesBetween
(
start
,
end
).
getMinutes
();
unitTime
=
60
;
}
else
if
(
Objects
.
equals
(
"2"
,
timeType
))
{
DATE_FORMAT
=
YMD_H_FORMATTER
;
diffNum
=
Hours
.
hoursBetween
(
start
,
end
).
getHours
();
unitTime
=
60
*
60
;
}
else
if
(
Objects
.
equals
(
"3"
,
timeType
))
{
DATE_FORMAT
=
YMD_FORMATTER
;
diffNum
=
Days
.
daysBetween
(
start
,
end
).
getDays
();
unitTime
=
24
*
60
*
60
;
}
else
if
(
Objects
.
equals
(
"4"
,
timeType
))
{
DATE_FORMAT
=
YM_FORMATTER
;
diffNum
=
Months
.
monthsBetween
(
start
,
end
).
getMonths
();
unitTime
=
30
*
24
*
60
*
60
;
}
for
(
int
i
=
0
;
i
<=
diffNum
;
i
++)
{
String
format
=
String
.
format
(
FORMATSTR
,
indexName
,
start
.
plusSeconds
(
i
*
unitTime
).
toString
(
DATE_FORMAT
));
indexList
.
add
(
format
);
}
return
indexList
.
toArray
(
new
String
[
0
]);
}
/**
* 根据开始结束时间匹配 文件完整路径
*
* @param fileDirectory 文件目录
* @param startTime 开始时间戳
* @param endTime 截止时间戳
* @param timeType 1:分钟 2:小时 3:天 4:月 5;10分钟
* @return
*/
public
static
String
[]
getFileListByTime
(
String
fileDirectory
,
String
filePrefix
,
long
startTime
,
long
endTime
,
String
timeType
)
{
Set
<
String
>
indexList
=
new
TreeSet
<>();
///data/track_partitions/dt=2023-08-09/ht=11/mt=00
DateTime
start
=
new
DateTime
(
startTime
);
DateTime
end
=
new
DateTime
(
endTime
);
while
(
start
.
isBefore
(
end
)){
String
dt
=
start
.
toString
(
"yyyy-MM-dd"
);
dt
=
"dt="
+
dt
;
int
hour
=
start
.
getHourOfDay
();
String
ht
=
Tools
.
fillZeroFront
(
hour
+
""
,
2
);
ht
=
"ht="
+
ht
;
int
minute
=
start
.
getMinuteOfHour
();
int
index
=
minute
/
10
*
10
;
String
mt
=
Tools
.
fillZeroFront
(
index
+
""
,
2
);
mt
=
"mt="
+
mt
;
String
directory
=
fileDirectory
+
"/"
+
dt
+
"/"
+
ht
+
"/"
+
mt
;
if
(!
new
File
(
directory
).
exists
()){
start
=
start
.
plusMinutes
(
1
);
continue
;
}
IOFileFilter
ioFileFilter
=
FileFilterUtils
.
prefixFileFilter
(
filePrefix
);
List
<
File
>
fileList
=
FileUtils
.
listFiles
(
new
File
(
directory
),
ioFileFilter
,
null
).
stream
().
collect
(
Collectors
.
toList
());
String
fileName
=
null
;
for
(
File
dataFile
:
fileList
)
{
fileName
=
dataFile
.
getName
();
String
filePath
=
directory
+
"/"
+
fileName
;
if
(!
indexList
.
contains
(
filePath
))
{
indexList
.
add
(
filePath
);
}
}
start
=
start
.
plusMinutes
(
1
);
// System.out.println("start:"+start.toString(DateUtil.DATE_FORMAT));
}
// System.out.println("end:"+start.toString(DateUtil.DATE_FORMAT));
// System.out.println(indexList.toString());
// indexList = indexList.stream().sorted().collect(Collectors.toSet());
return
indexList
.
toArray
(
new
String
[
0
]);
}
/**
* 获取当前时间实时索引
*
* @param indexName
* @return
*/
// public static String[] getIndexByNow(String indexName) {
// long start = DateTime.now().plusMonths(-1).withTimeAtStartOfDay().getMillis();
// long end = DateTime.now().getMillis();
// return getIndexByTime(indexName, start, end);
// }
//
// public static String[] getIndexBySingle(String indexName, long time) {
// long start = new DateTime(time).plusMonths(-1).withTimeAtStartOfDay().getMillis();
// return getIndexByTime(indexName, start, time);
// }
public
static
String
getInsertIndex
(
String
indexName
)
{
return
String
.
format
(
"%s_%s"
,
indexName
,
DateTime
.
now
().
toString
(
YM_FORMATTER
));
}
public
static
List
<
String
>
getTimeList
(
String
formatter
,
long
interval
,
long
startTime
,
long
endTime
)
{
List
<
String
>
timeList
=
new
ArrayList
<>();
for
(
long
i
=
startTime
;
i
<
endTime
;
i
+=
interval
)
{
timeList
.
add
(
new
DateTime
(
i
).
toString
(
formatter
));
}
return
timeList
;
}
public
static
List
<
String
>
getMinutesStr
()
{
List
<
String
>
timeStr
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
24
;
i
++)
{
String
h
;
if
(
i
<
10
)
{
h
=
"0"
+
i
;
}
else
{
h
=
i
+
""
;
}
for
(
int
j
=
0
;
j
<
60
;
j
++)
{
String
m
;
if
(
j
<
10
)
{
m
=
"0"
+
j
;
}
else
{
m
=
j
+
""
;
}
timeStr
.
add
(
h
+
":"
+
m
);
}
}
return
timeStr
;
}
public
static
void
main
(
String
[]
args
)
{
DateTime
start
=
DateTime
.
now
().
withTimeAtStartOfDay
();
DateTime
end
=
DateTime
.
now
();
List
<
String
>
indexByTime
=
EsDateIndexUtil
.
getTimeScopeList
(
start
,
end
,
TimeGranularityEnum
.
ONE_HOUR
,
"HH:mm"
);
System
.
out
.
println
(
indexByTime
);
}
}
signal-optimize-service/src/main/java/net/wanji/opt/common/enums/TimeGranularityEnum.java
0 → 100644
View file @
85336f67
package
net
.
wanji
.
opt
.
common
.
enums
;
/**
* 时间粒度
*/
public
enum
TimeGranularityEnum
{
FIVE_MINUTE
(
"5m"
,
"5分钟"
,
5
,
"5 MINUTE"
),
TEN_MINUTE
(
"10m"
,
"10分钟"
,
10
,
"10 MINUTE"
),
FIFTEEN_MINUTE
(
"15m"
,
"15分钟"
,
15
,
"15 MINUTE"
),
THIRTY_MINUTE
(
"30m"
,
"30分钟"
,
30
,
"30 MINUTE"
),
ONE_HOUR
(
"1h"
,
"1小时"
,
60
,
"60 MINUTE"
),
ONE_DAY
(
"1d"
,
"1天"
,
60
,
24
*
60
+
" MINUTE"
)
;
private
String
type
;
private
String
desc
;
private
Integer
minites
;
private
String
enDesc
;
TimeGranularityEnum
(
String
type
,
String
desc
,
int
minites
,
String
enDesc
)
{
this
.
type
=
type
;
this
.
desc
=
desc
;
this
.
minites
=
minites
;
this
.
enDesc
=
enDesc
;
}
public
static
TimeGranularityEnum
getEnumByType
(
String
type
){
for
(
TimeGranularityEnum
timeGranularityEnum
:
TimeGranularityEnum
.
values
())
{
if
(
timeGranularityEnum
.
getType
().
equals
(
type
)){
return
timeGranularityEnum
;
}
}
return
null
;
}
public
String
getType
()
{
return
type
;
}
public
String
getDesc
()
{
return
desc
;
}
public
Integer
getMinites
()
{
return
minites
;
}
public
String
getEnDesc
()
{
return
enDesc
;
}
public
void
setEnDesc
(
String
enDesc
)
{
this
.
enDesc
=
enDesc
;
}
}
signal-optimize-service/src/main/java/net/wanji/opt/controller/GreenwaveHistRestServer.java
View file @
85336f67
...
@@ -134,7 +134,7 @@ public class GreenwaveHistRestServer {
...
@@ -134,7 +134,7 @@ public class GreenwaveHistRestServer {
@ApiImplicitParam
(
name
=
"crossId"
,
value
=
"路口ID"
,
required
=
true
,
dataType
=
"String"
,
defaultValue
=
"13MOD0B5SI0"
),
@ApiImplicitParam
(
name
=
"crossId"
,
value
=
"路口ID"
,
required
=
true
,
dataType
=
"String"
,
defaultValue
=
"13MOD0B5SI0"
),
@ApiImplicitParam
(
name
=
"greenDir"
,
value
=
"绿波协调方向,多个逗号分隔"
,
required
=
true
,
dataType
=
"String"
,
defaultValue
=
"5,7"
),
@ApiImplicitParam
(
name
=
"greenDir"
,
value
=
"绿波协调方向,多个逗号分隔"
,
required
=
true
,
dataType
=
"String"
,
defaultValue
=
"5,7"
),
@ApiImplicitParam
(
name
=
"startTime"
,
value
=
"截止时间,格式:yyyy-MM-dd HH:mm:ss"
,
required
=
false
,
dataType
=
"String"
,
defaultValue
=
"2024-12-04 00:00:00"
),
@ApiImplicitParam
(
name
=
"startTime"
,
value
=
"截止时间,格式:yyyy-MM-dd HH:mm:ss"
,
required
=
false
,
dataType
=
"String"
,
defaultValue
=
"2024-12-04 00:00:00"
),
@ApiImplicitParam
(
name
=
"endTime"
,
value
=
"截止时间,格式:yyyy-MM-dd HH:mm:ss"
,
required
=
false
,
dataType
=
"String"
,
defaultValue
=
"2024-12-0
5 00:00:00
"
)
@ApiImplicitParam
(
name
=
"endTime"
,
value
=
"截止时间,格式:yyyy-MM-dd HH:mm:ss"
,
required
=
false
,
dataType
=
"String"
,
defaultValue
=
"2024-12-0
4 23:59:59
"
)
})
})
@ApiResponses
({
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"成功"
,
response
=
GreenwaveHist
.
class
,
@ApiResponse
(
code
=
200
,
message
=
"成功"
,
response
=
GreenwaveHist
.
class
,
...
@@ -161,7 +161,7 @@ public class GreenwaveHistRestServer {
...
@@ -161,7 +161,7 @@ public class GreenwaveHistRestServer {
@ApiImplicitParam
(
name
=
"crossId"
,
value
=
"路口ID"
,
required
=
true
,
dataType
=
"String"
,
defaultValue
=
"13MOD0B5SI0"
),
@ApiImplicitParam
(
name
=
"crossId"
,
value
=
"路口ID"
,
required
=
true
,
dataType
=
"String"
,
defaultValue
=
"13MOD0B5SI0"
),
@ApiImplicitParam
(
name
=
"groupType"
,
value
=
"时间粒度类型 0:5分钟粒度 1:15分钟粒度 2:30分钟粒度 3:小时粒度"
,
required
=
true
,
dataType
=
"Integer"
,
defaultValue
=
"1"
),
@ApiImplicitParam
(
name
=
"groupType"
,
value
=
"时间粒度类型 0:5分钟粒度 1:15分钟粒度 2:30分钟粒度 3:小时粒度"
,
required
=
true
,
dataType
=
"Integer"
,
defaultValue
=
"1"
),
@ApiImplicitParam
(
name
=
"startTime"
,
value
=
"截止时间,格式:yyyy-MM-dd HH:mm:ss"
,
required
=
false
,
dataType
=
"String"
,
defaultValue
=
"2024-12-04 00:00:00"
),
@ApiImplicitParam
(
name
=
"startTime"
,
value
=
"截止时间,格式:yyyy-MM-dd HH:mm:ss"
,
required
=
false
,
dataType
=
"String"
,
defaultValue
=
"2024-12-04 00:00:00"
),
@ApiImplicitParam
(
name
=
"endTime"
,
value
=
"截止时间,格式:yyyy-MM-dd HH:mm:ss"
,
required
=
false
,
dataType
=
"String"
,
defaultValue
=
"2024-12-0
5 00:00:00
"
)
@ApiImplicitParam
(
name
=
"endTime"
,
value
=
"截止时间,格式:yyyy-MM-dd HH:mm:ss"
,
required
=
false
,
dataType
=
"String"
,
defaultValue
=
"2024-12-0
4 23:59:59
"
)
})
})
@ApiResponses
({
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"成功"
,
response
=
GreenwaveHist
.
class
,
@ApiResponse
(
code
=
200
,
message
=
"成功"
,
response
=
GreenwaveHist
.
class
,
...
@@ -181,6 +181,32 @@ public class GreenwaveHistRestServer {
...
@@ -181,6 +181,32 @@ public class GreenwaveHistRestServer {
return
jsonView
;
return
jsonView
;
}
}
@GetMapping
(
"/findGreenWaveCrossTurnIndex"
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"绿波路口转向级->分粒度指标趋势"
,
notes
=
""
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"crossId"
,
value
=
"路口ID"
,
required
=
true
,
dataType
=
"String"
,
defaultValue
=
"13MOD0B5SI0"
),
@ApiImplicitParam
(
name
=
"groupType"
,
value
=
"时间粒度类型 0:5分钟粒度 1:15分钟粒度 2:30分钟粒度 3:小时粒度"
,
required
=
true
,
dataType
=
"Integer"
,
defaultValue
=
"1"
),
@ApiImplicitParam
(
name
=
"startTime"
,
value
=
"截止时间,格式:yyyy-MM-dd HH:mm:ss"
,
required
=
false
,
dataType
=
"String"
,
defaultValue
=
"2024-12-04 00:00:00"
),
@ApiImplicitParam
(
name
=
"endTime"
,
value
=
"截止时间,格式:yyyy-MM-dd HH:mm:ss"
,
required
=
false
,
dataType
=
"String"
,
defaultValue
=
"2024-12-05 00:00:00"
)
})
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"成功"
,
response
=
GreenwaveHist
.
class
,
responseHeaders
=
{
@ResponseHeader
(
name
=
"Content-Type"
,
description
=
"application/json"
)})
})
public
JsonViewObject
findGreenWaveCrossTurnIndex
(
String
crossId
,
String
startTime
,
String
endTime
,
String
groupType
)
{
JsonViewObject
jsonView
=
JsonViewObject
.
newInstance
();
try
{
JSONObject
list
=
greenwaveHistProvider
.
findGreenWaveCrossTurnIndex
(
crossId
,
startTime
,
endTime
,
groupType
);
jsonView
.
success
(
list
);
}
catch
(
DubboProviderException
e
)
{
jsonView
.
fail
(
I18nResourceBundle
.
getConstants
(
"GET_FAILED_MSG"
));
log
.
error
(
"{} getAll error"
,
this
.
getClass
().
getSimpleName
(),
e
);
}
return
jsonView
;
}
@GetMapping
(
"/findGreenWaveCrossIndex"
)
@GetMapping
(
"/findGreenWaveCrossIndex"
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"绿波路口级->分粒度指标趋势"
,
notes
=
""
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"绿波路口级->分粒度指标趋势"
,
notes
=
""
)
...
...
signal-optimize-service/src/main/java/net/wanji/opt/dao/mapper/GreenwaveHistoryMapper.java
View file @
85336f67
...
@@ -4,6 +4,7 @@ package net.wanji.opt.dao.mapper;
...
@@ -4,6 +4,7 @@ package net.wanji.opt.dao.mapper;
import
net.wanji.common.framework.mapper.BaseInterfaceMapper
;
import
net.wanji.common.framework.mapper.BaseInterfaceMapper
;
import
net.wanji.databus.po.CrossDataHistPO
;
import
net.wanji.databus.po.CrossDataHistPO
;
import
net.wanji.databus.po.CrossDirDataHistPO
;
import
net.wanji.databus.po.CrossDirDataHistPO
;
import
net.wanji.databus.po.CrossTurnDataHistPO
;
import
net.wanji.opt.entity.GreenwaveHist
;
import
net.wanji.opt.entity.GreenwaveHist
;
import
net.wanji.opt.vo.GreenWaveRunStateVO
;
import
net.wanji.opt.vo.GreenWaveRunStateVO
;
import
org.apache.ibatis.annotations.Param
;
import
org.apache.ibatis.annotations.Param
;
...
@@ -62,5 +63,12 @@ public interface GreenwaveHistoryMapper extends BaseInterfaceMapper<GreenwaveHis
...
@@ -62,5 +63,12 @@ public interface GreenwaveHistoryMapper extends BaseInterfaceMapper<GreenwaveHis
*/
*/
List
<
GreenWaveRunStateVO
>
findGreenWaveRunState
(
Map
<
String
,
Object
>
params
);
List
<
GreenWaveRunStateVO
>
findGreenWaveRunState
(
Map
<
String
,
Object
>
params
);
/**
* 路口转向指标趋势数据据
* @param params
* @return
*/
List
<
CrossTurnDataHistPO
>
findGreenWaveCrossTurnIndex
(
Map
<
String
,
Object
>
params
);
}
}
signal-optimize-service/src/main/java/net/wanji/opt/service/GreenwaveHistProvider.java
View file @
85336f67
...
@@ -79,4 +79,16 @@ public interface GreenwaveHistProvider extends BaseDubboInterface<GreenwaveHist>
...
@@ -79,4 +79,16 @@ public interface GreenwaveHistProvider extends BaseDubboInterface<GreenwaveHist>
* @return
* @return
*/
*/
List
<
GreenWaveRunStateVO
>
findGreenWaveRunState
(
Integer
greenId
,
String
crossId
,
String
startTime
,
String
endTime
,
String
eventType
)
throws
DubboProviderException
;
List
<
GreenWaveRunStateVO
>
findGreenWaveRunState
(
Integer
greenId
,
String
crossId
,
String
startTime
,
String
endTime
,
String
eventType
)
throws
DubboProviderException
;
/**
* 路口转向级不同时间粒度指标分析
* @param crossId
* @param startTime
* @param endTime
* @param groupType
* @return
* @throws DubboProviderException
*/
JSONObject
findGreenWaveCrossTurnIndex
(
String
crossId
,
String
startTime
,
String
endTime
,
String
groupType
)
throws
DubboProviderException
;
}
}
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/GreenwaveHistProviderImpl.java
View file @
85336f67
...
@@ -3,6 +3,8 @@ package net.wanji.opt.service.impl;
...
@@ -3,6 +3,8 @@ package net.wanji.opt.service.impl;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.enums.BaseEnum
;
import
net.wanji.common.enums.TurnConvertEnum
;
import
net.wanji.common.framework.dubbointerface.impl.BaseDubboInterfaceImpl
;
import
net.wanji.common.framework.dubbointerface.impl.BaseDubboInterfaceImpl
;
import
net.wanji.common.framework.exception.DubboProviderException
;
import
net.wanji.common.framework.exception.DubboProviderException
;
import
net.wanji.common.framework.mapper.BaseInterfaceMapper
;
import
net.wanji.common.framework.mapper.BaseInterfaceMapper
;
...
@@ -10,6 +12,10 @@ import net.wanji.common.gts.Tools;
...
@@ -10,6 +12,10 @@ import net.wanji.common.gts.Tools;
import
net.wanji.common.utils.tool.DateUtil
;
import
net.wanji.common.utils.tool.DateUtil
;
import
net.wanji.databus.po.CrossDataHistPO
;
import
net.wanji.databus.po.CrossDataHistPO
;
import
net.wanji.databus.po.CrossDirDataHistPO
;
import
net.wanji.databus.po.CrossDirDataHistPO
;
import
net.wanji.databus.po.CrossTurnDataHistPO
;
import
net.wanji.databus.po.CrossTurnInfoPO
;
import
net.wanji.opt.common.EsDateIndexUtil
;
import
net.wanji.opt.common.enums.TimeGranularityEnum
;
import
net.wanji.opt.dao.mapper.GreenwaveHistoryMapper
;
import
net.wanji.opt.dao.mapper.GreenwaveHistoryMapper
;
import
net.wanji.opt.entity.GreenwaveHist
;
import
net.wanji.opt.entity.GreenwaveHist
;
import
net.wanji.opt.service.GreenwaveHistProvider
;
import
net.wanji.opt.service.GreenwaveHistProvider
;
...
@@ -26,7 +32,9 @@ import javax.annotation.Resource;
...
@@ -26,7 +32,9 @@ import javax.annotation.Resource;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Arrays
;
import
java.util.Comparator
;
import
java.util.Comparator
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.Objects
;
...
@@ -256,7 +264,7 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH
...
@@ -256,7 +264,7 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH
}
}
@Override
@Override
public
List
<
GreenWaveRunStateVO
>
findGreenWaveRunState
(
Integer
greenId
,
String
crossId
,
String
startTime
,
String
endTime
,
String
eventType
)
{
public
List
<
GreenWaveRunStateVO
>
findGreenWaveRunState
(
Integer
greenId
,
String
crossId
,
String
startTime
,
String
endTime
,
String
eventType
)
{
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
params
.
put
(
"greenId"
,
greenId
);
params
.
put
(
"greenId"
,
greenId
);
params
.
put
(
"startDate"
,
startTime
);
params
.
put
(
"startDate"
,
startTime
);
...
@@ -268,11 +276,10 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH
...
@@ -268,11 +276,10 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH
params
.
put
(
"eventTypeList"
,
Arrays
.
asList
(
arr
));
params
.
put
(
"eventTypeList"
,
Arrays
.
asList
(
arr
));
}
}
int
[]
stateList
=
new
int
[]{
705
,
706
};
int
[]
stateList
=
new
int
[]{
705
,
706
};
List
<
GreenWaveRunStateVO
>
list
=
greenwaveHistoryMapper
.
findGreenWaveRunState
(
params
);
List
<
GreenWaveRunStateVO
>
list
=
greenwaveHistoryMapper
.
findGreenWaveRunState
(
params
);
Map
<
Integer
,
GreenWaveRunStateVO
>
groupList
=
list
.
stream
().
collect
(
Collectors
.
toMap
(
o
->
o
.
getState
(),
o
->
o
));
Map
<
Integer
,
GreenWaveRunStateVO
>
groupList
=
list
.
stream
().
collect
(
Collectors
.
toMap
(
o
->
o
.
getState
(),
o
->
o
));
DateTime
startDateTime
=
DateTime
.
parse
(
startTime
,
DateTimeFormat
.
forPattern
(
"yyyy-MM-dd HH:mm:ss"
));
DateTime
startDateTime
=
DateTime
.
parse
(
startTime
,
DateTimeFormat
.
forPattern
(
"yyyy-MM-dd HH:mm:ss"
));
...
@@ -286,8 +293,8 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH
...
@@ -286,8 +293,8 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH
list
.
add
(
tmp
);
list
.
add
(
tmp
);
}
}
}
}
int
totalTime
=
Seconds
.
secondsBetween
(
startDateTime
,
endDateTime
).
getSeconds
();
int
totalTime
=
Seconds
.
secondsBetween
(
startDateTime
,
endDateTime
).
getSeconds
();
for
(
GreenWaveRunStateVO
vo
:
list
)
{
for
(
GreenWaveRunStateVO
vo
:
list
)
{
// if (vo.getDuration()<=0) {
// if (vo.getDuration()<=0) {
// vo.setDuration(getRandomValue(totalTime / 10, 120));
// vo.setDuration(getRandomValue(totalTime / 10, 120));
// }
// }
...
@@ -297,15 +304,92 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH
...
@@ -297,15 +304,92 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH
return
list
;
return
list
;
}
}
@Override
public
JSONObject
findGreenWaveCrossTurnIndex
(
String
crossId
,
String
startTime
,
String
endTime
,
String
groupType
)
throws
DubboProviderException
{
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
params
.
put
(
"crossId"
,
crossId
);
params
.
put
(
"startDate"
,
startTime
);
params
.
put
(
"endDate"
,
endTime
);
params
.
put
(
"groupType"
,
groupType
);
List
<
CrossTurnDataHistPO
>
list
=
greenwaveHistoryMapper
.
findGreenWaveCrossTurnIndex
(
params
);
list
=
list
.
stream
().
sorted
(
Comparator
.
comparing
(
o
->
o
.
getStartTime
())).
collect
(
Collectors
.
toList
());
//存放时段
Set
<
String
>
sortedSet
=
new
TreeSet
<>();
//===========================根据开始、结束时间输出完整时刻点=================================================//
DateTime
start
=
DateTime
.
parse
(
startTime
,
DateTimeFormat
.
forPattern
(
EsDateIndexUtil
.
YMD_HM_FORMATTER
));
DateTime
end
=
DateTime
.
parse
(
endTime
,
DateTimeFormat
.
forPattern
(
EsDateIndexUtil
.
YMD_HM_FORMATTER
));
if
(
Objects
.
equals
(
"0"
,
groupType
))
{
sortedSet
.
addAll
(
EsDateIndexUtil
.
getTimeScopeList
(
start
,
end
,
TimeGranularityEnum
.
FIVE_MINUTE
,
EsDateIndexUtil
.
YMD_HM_FORMATTER
));
}
else
if
(
Objects
.
equals
(
"1"
,
groupType
))
{
sortedSet
.
addAll
(
EsDateIndexUtil
.
getTimeScopeList
(
start
,
end
,
TimeGranularityEnum
.
FIFTEEN_MINUTE
,
EsDateIndexUtil
.
YMD_HM_FORMATTER
));
}
else
if
(
Objects
.
equals
(
"2"
,
groupType
))
{
sortedSet
.
addAll
(
EsDateIndexUtil
.
getTimeScopeList
(
start
,
end
,
TimeGranularityEnum
.
THIRTY_MINUTE
,
EsDateIndexUtil
.
YMD_HM_FORMATTER
));
}
else
if
(
Objects
.
equals
(
"3"
,
groupType
))
{
sortedSet
.
addAll
(
EsDateIndexUtil
.
getTimeScopeList
(
start
,
end
,
TimeGranularityEnum
.
ONE_HOUR
,
EsDateIndexUtil
.
YMD_HM_FORMATTER
));
}
//======================================================================================================//
//存放所有进口数据
List
<
Map
<
String
,
Object
>>
allList
=
new
ArrayList
<>();
//按时间分组分组
Map
<
String
,
List
<
CrossTurnDataHistPO
>>
groupByDir
=
list
.
stream
().
collect
(
Collectors
.
groupingBy
(
o
->
o
.
getInDir
()
+
"_"
+
o
.
getTurnType
(),
TreeMap:
:
new
,
Collectors
.
toList
()));
List
<
Map
<
String
,
Object
>>
turnList
=
new
ArrayList
<>();
for
(
Map
.
Entry
<
String
,
List
<
CrossTurnDataHistPO
>>
entry
:
groupByDir
.
entrySet
())
{
String
key
=
entry
.
getKey
();
String
[]
sps
=
key
.
split
(
"_"
);
Integer
dirType
=
Integer
.
parseInt
(
sps
[
0
]);
String
dirName
=
BaseEnum
.
SignalDirectionEnum
.
getNameByCode
(
dirType
);
String
turnDesc
=
TurnConvertEnum
.
getDescByKey
(
Integer
.
valueOf
(
sps
[
1
]));
String
dirTurnDesc
=
dirName
+
"进口"
+
turnDesc
;
//按方向排序
List
<
CrossTurnDataHistPO
>
value
=
entry
.
getValue
().
stream
().
sorted
(
Comparator
.
comparing
(
o
->
o
.
getStartTime
())).
collect
(
Collectors
.
toList
());
//有实际数据的时刻点
Set
<
String
>
timeList
=
value
.
stream
().
map
(
po
->
DateUtil
.
formatDate
(
po
.
getStartTime
(),
"HH:mm"
)).
collect
(
Collectors
.
toSet
());
//补充缺少时段数据,保留时段字段默认值
for
(
String
timeSec
:
sortedSet
)
{
if
(!
timeList
.
contains
(
timeSec
))
{
CrossTurnDataHistPO
tmp
=
new
CrossTurnDataHistPO
();
tmp
.
setStartTime
(
DateTime
.
parse
(
timeSec
,
DateTimeFormat
.
forPattern
(
EsDateIndexUtil
.
YMD_HM_FORMATTER
)).
toDate
());
value
.
add
(
tmp
);
}
}
value
=
value
.
stream
().
sorted
(
Comparator
.
comparing
(
CrossTurnDataHistPO:
:
getStartTime
)).
collect
(
Collectors
.
toList
());
// sortedSet.clear();
// value.forEach(o->sortedSet.add(DateUtil.formatDate(o.getStartTime(),"HH:mm")));
Map
<
String
,
Object
>
mapList
=
new
HashMap
<>();
mapList
.
put
(
"dirTurnCode"
,
key
);
mapList
.
put
(
"dirTurnDesc"
,
dirTurnDesc
);
mapList
.
put
(
"list"
,
value
);
allList
.
add
(
mapList
);
}
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"timeList"
,
sortedSet
.
stream
().
map
(
o
->
o
.
substring
(
o
.
indexOf
(
" "
)+
1
,
o
.
lastIndexOf
(
":"
))));
jsonObject
.
put
(
"dataList"
,
allList
);
jsonObject
.
put
(
"dirList"
,
groupByDir
.
keySet
());
return
jsonObject
;
}
/**
/**
* 获取随机数
* 获取随机数
*
* @param max
* @param max
* @param min
* @param min
* @return
* @return
*/
*/
public
static
int
getRandomValue
(
int
max
,
int
min
)
{
public
static
int
getRandomValue
(
int
max
,
int
min
)
{
Random
random
=
new
Random
();
Random
random
=
new
Random
();
int
num
=
random
.
nextInt
(
max
+
1
-
min
)+
min
;
int
num
=
random
.
nextInt
(
max
+
1
-
min
)
+
min
;
return
num
;
return
num
;
}
}
...
...
signal-optimize-service/src/main/resources/mapper/GreenwaveHistMapper.xml
View file @
85336f67
...
@@ -94,13 +94,13 @@
...
@@ -94,13 +94,13 @@
GROUP BY t.cross_id, DATE_FORMAT(start_time, '%Y-%m-%d %H:%i:00')
GROUP BY t.cross_id, DATE_FORMAT(start_time, '%Y-%m-%d %H:%i:00')
;
;
</select>
</select>
<!-- 绿波路口方向级指标趋势,支持按15分钟粒度、30分钟粒度、1小时粒度汇聚 -->
<!-- 绿波路口方向级指标趋势,支持按
5分钟粒度、
15分钟粒度、30分钟粒度、1小时粒度汇聚 -->
<select
id=
"findGreenWaveCrossDirIndex"
<select
id=
"findGreenWaveCrossDirIndex"
resultMap=
"net.wanji.databus.dao.mapper.CrossDirDataHistMapper.BaseResultMap"
>
resultMap=
"net.wanji.databus.dao.mapper.CrossDirDataHistMapper.BaseResultMap"
>
SELECT MIN(start_time) start_time,
SELECT MIN(start_time) start_time,
cross_id,
cross_id,
dir_type,
dir_type,
round(AVG(traffic_index),2),
round(AVG(traffic_index),2)
traffic_index
,
SUM(flow) flow,
SUM(flow) flow,
round(AVG(speed),2) speed,
round(AVG(speed),2) speed,
MAX(queue_length) queue_length,
MAX(queue_length) queue_length,
...
@@ -138,8 +138,54 @@
...
@@ -138,8 +138,54 @@
GROUP BY t.cross_id,t.dir_type,unit_time
GROUP BY t.cross_id,t.dir_type,unit_time
</select>
</select>
<!-- 绿波路口方向级指标趋势,支持按5分钟粒度、15分钟粒度、30分钟粒度、1小时粒度汇聚 -->
<select
id=
"findGreenWaveCrossTurnIndex"
resultMap=
"net.wanji.databus.dao.mapper.CrossTurnDataHistMapper.BaseResultMap"
>
SELECT MIN(start_time) start_time,
cross_id,
in_dir,
turn_type,
round(AVG(traffic_index),2) traffic_index,
SUM(flow) flow,
round(AVG(speed),2) speed,
MAX(queue_length) queue_length,
round(AVG(stop_times),2) stop_times,
round(AVG(delay_time),2) delay_time,
round(AVG(sturation),4) sturation
FROM
(
SELECT start_time,
(case
when #{groupType}=0 then CEIL(UNIX_TIMESTAMP(DATE_ADD(t.start_time,INTERVAL 5 MINUTE)))
when #{groupType}=1 then CEIL(UNIX_TIMESTAMP(DATE_ADD(t.start_time,INTERVAL 5 MINUTE)) / 900)
when #{groupType}=2 then CEIL(UNIX_TIMESTAMP(DATE_ADD(t.start_time,INTERVAL 5 MINUTE)) / 1800)
when #{groupType}=3 then CEIL(UNIX_TIMESTAMP(DATE_ADD(t.start_time,INTERVAL 5 MINUTE)) / 3600)
end
) unit_time,
cross_id,
in_dir,
turn_type,
traffic_index,
flow,
speed,
queue_length,
stop_times,
delay_time,
sturation
FROM t_cross_turn_data_hist t
where 1=1
<if
test=
"crossId!=null and crossId !=''"
>
and cross_id = #{crossId}
</if>
<if
test=
"startDate !=null and endDate !=null"
>
AND start_time >= #{startDate} and start_time
<
#{endDate}
</if>
) t
GROUP BY t.cross_id,t.in_dir,t.turn_type,unit_time
</select>
<!-- 绿波路口级指标趋势,支持按15分钟粒度、30分钟粒度、1小时粒度汇聚 -->
<!-- 绿波路口级指标趋势,支持按5分钟、15分钟粒度、30分钟粒度、1小时粒度汇聚 -->
<select
id=
"findGreenWaveCrossIndex"
resultMap=
"net.wanji.databus.dao.mapper.CrossDataHistMapper.BaseResultMap"
>
<select
id=
"findGreenWaveCrossIndex"
resultMap=
"net.wanji.databus.dao.mapper.CrossDataHistMapper.BaseResultMap"
>
SELECT MIN(start_time) start_time,
SELECT MIN(start_time) start_time,
cross_id,
cross_id,
...
@@ -178,6 +224,7 @@
...
@@ -178,6 +224,7 @@
) t
) t
GROUP BY t.cross_id,unit_time
GROUP BY t.cross_id,unit_time
</select>
</select>
<!-- 查看干线拥堵运行状态 -->
<!-- 查看干线拥堵运行状态 -->
<select
id=
"findGreenWaveRunState"
resultType=
"net.wanji.opt.vo.GreenWaveRunStateVO"
>
<select
id=
"findGreenWaveRunState"
resultType=
"net.wanji.opt.vo.GreenWaveRunStateVO"
>
select type as state,count(*) count,
select type as state,count(*) count,
...
...
wj-common/src/main/java/net/wanji/common/utils/tool/ScheduleUtil.java
View file @
85336f67
...
@@ -45,7 +45,7 @@ public class ScheduleUtil {
...
@@ -45,7 +45,7 @@ public class ScheduleUtil {
if
(
aChar
==
49
)
{
if
(
aChar
==
49
)
{
if
(
type
==
3
)
{
if
(
type
==
3
)
{
if
(
i
==
0
){
if
(
i
==
0
){
//星期日是
0
//星期日是
7
str
.
append
(
7
).
append
(
","
);
str
.
append
(
7
).
append
(
","
);
}
else
{
}
else
{
str
.
append
(
i
).
append
(
","
);
str
.
append
(
i
).
append
(
","
);
...
...
wj-databus/src/main/java/net/wanji/databus/po/CrossTurnDataRealtimePO.java
View file @
85336f67
package
net
.
wanji
.
databus
.
po
;
package
net
.
wanji
.
databus
.
po
;
import
com.alibaba.fastjson.annotation.JSONField
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.Data
;
...
@@ -77,7 +79,10 @@ public class CrossTurnDataRealtimePO {
...
@@ -77,7 +79,10 @@ public class CrossTurnDataRealtimePO {
public
Double
twoStopRate
;
public
Double
twoStopRate
;
@ApiModelProperty
(
name
=
"三次停车率"
,
notes
=
""
)
@ApiModelProperty
(
name
=
"三次停车率"
,
notes
=
""
)
public
Double
threeStopRate
;
public
Double
threeStopRate
;
@ApiModelProperty
(
name
=
"开始时间"
,
notes
=
""
)
@ApiModelProperty
(
value
=
"开始时间:yyyy-MM-dd HH:mm:ss"
,
notes
=
""
)
@JSONField
(
format
=
"yyyy-MM-dd HH:mm:ss"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
public
Date
startTime
;
public
Date
startTime
;
/** 采集时间(10位时间戳) */
/** 采集时间(10位时间戳) */
@ApiModelProperty
(
name
=
"采集时间(10位时间戳)"
,
notes
=
""
)
@ApiModelProperty
(
name
=
"采集时间(10位时间戳)"
,
notes
=
""
)
...
...
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