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
6c87b648
Commit
6c87b648
authored
Mar 04, 2023
by
hanbing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[add] 诊断优化,查询优化效果
parent
f4bafc14
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
387 additions
and
27 deletions
+387
-27
DiagnoController.java
.../main/java/net/wanji/opt/controller/DiagnoController.java
+14
-0
CrossDataHistMapper.java
...in/java/net/wanji/opt/dao/mapper/CrossDataHistMapper.java
+17
-0
CrossSchemeOptLogMapper.java
...ava/net/wanji/opt/dao/mapper/CrossSchemeOptLogMapper.java
+2
-0
CrossDirDataHistMapper.java
...et/wanji/opt/dao/mapper/trend/CrossDirDataHistMapper.java
+2
-0
CrossIdAndDirDTO.java
...ice/src/main/java/net/wanji/opt/dto/CrossIdAndDirDTO.java
+17
-0
OptDataExtend.java
...ervice/src/main/java/net/wanji/opt/dto/OptDataExtend.java
+15
-0
CrossDataHistPO.java
...rvice/src/main/java/net/wanji/opt/po/CrossDataHistPO.java
+91
-0
CrossDirDataHistPO.java
.../main/java/net/wanji/opt/po/trend/CrossDirDataHistPO.java
+1
-1
DiagnoService.java
...ce/src/main/java/net/wanji/opt/service/DiagnoService.java
+4
-0
DiagnoServiceImpl.java
...in/java/net/wanji/opt/service/impl/DiagnoServiceImpl.java
+129
-25
TrendServiceImpl.java
...ain/java/net/wanji/opt/service/impl/TrendServiceImpl.java
+1
-1
OptEffectVO.java
...e-service/src/main/java/net/wanji/opt/vo/OptEffectVO.java
+63
-0
CrossDataHistMapper.xml
...service/src/main/resources/mapper/CrossDataHistMapper.xml
+14
-0
CrossSchemeOptLogMapper.xml
...ice/src/main/resources/mapper/CrossSchemeOptLogMapper.xml
+8
-0
CrossDirDataHist.xml
...vice/src/main/resources/mapper/trend/CrossDirDataHist.xml
+9
-0
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/controller/DiagnoController.java
View file @
6c87b648
...
...
@@ -6,11 +6,13 @@ import io.swagger.annotations.ApiResponse;
import
io.swagger.annotations.ApiResponses
;
import
net.wanji.common.dto.CrossIdDTO
;
import
net.wanji.common.framework.rest.JsonViewObject
;
import
net.wanji.opt.dto.CrossIdAndDirDTO
;
import
net.wanji.opt.dto.CrossIdAndSchemeIdDTO
;
import
net.wanji.opt.dto.SendManualDTO
;
import
net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO
;
import
net.wanji.opt.service.DiagnoService
;
import
net.wanji.opt.vo.CrossIdAndLocationVO
;
import
net.wanji.opt.vo.OptEffectVO
;
import
net.wanji.opt.vo.SchemeOptVO
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
...
...
@@ -108,4 +110,16 @@ public class DiagnoController {
diagnoService
.
restoreSend
(
crossIdDTO
);
return
JsonViewObject
.
newInstance
().
success
();
}
@ApiOperation
(
value
=
"优化效果"
,
notes
=
"优化效果"
,
response
=
JsonViewObject
.
class
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@PostMapping
(
value
=
"/optEffect"
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
OptEffectVO
.
class
),
})
public
JsonViewObject
optEffect
(
@RequestBody
CrossIdAndDirDTO
crossIdAndDirDTO
)
{
OptEffectVO
optEffectVO
=
diagnoService
.
optEffect
(
crossIdAndDirDTO
);
return
JsonViewObject
.
newInstance
().
success
(
optEffectVO
);
}
}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/dao/mapper/CrossDataHistMapper.java
0 → 100644
View file @
6c87b648
package
net
.
wanji
.
opt
.
dao
.
mapper
;
import
net.wanji.opt.po.CrossDataHistPO
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
/**
* @author hanbing
* @date 2023/1/12 13:24
* @desc CrossInfoMapper
*/
@Repository
public
interface
CrossDataHistMapper
{
List
<
CrossDataHistPO
>
selectByCrossIdAndTimestamp
(
String
crossId
,
long
preSeconds
);
}
signal-optimize-service/src/main/java/net/wanji/opt/dao/mapper/CrossSchemeOptLogMapper.java
View file @
6c87b648
...
...
@@ -18,4 +18,6 @@ public interface CrossSchemeOptLogMapper {
int
insertOne
(
CrossSchemeOptLogPO
entity
);
int
insertBatch
(
@Param
(
"list"
)
List
<
CrossSchemeOptLogPO
>
list
);
List
<
CrossSchemeOptLogPO
>
selectMaxByCrossId
(
String
crossId
);
}
signal-optimize-service/src/main/java/net/wanji/opt/dao/mapper/trend/CrossDirDataHistMapper.java
View file @
6c87b648
...
...
@@ -15,4 +15,6 @@ import java.util.List;
public
interface
CrossDirDataHistMapper
{
List
<
CrossDirDataHistPO
>
selectByCrossIdAndTimestamp
(
String
crossId
,
long
preSeconds
);
List
<
CrossDirDataHistPO
>
selectByCrossIdDirAndTimestamp
(
String
crossId
,
Integer
dir
,
long
preSeconds
);
}
signal-optimize-service/src/main/java/net/wanji/opt/dto/CrossIdAndDirDTO.java
0 → 100644
View file @
6c87b648
package
net
.
wanji
.
opt
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
*
* @author Kent HAN
* @date 2022/12/20 10:17
*/
@Data
public
class
CrossIdAndDirDTO
{
@ApiModelProperty
(
value
=
"路口ID,如:14Q1409IRF0"
,
required
=
true
)
private
String
crossId
;
@ApiModelProperty
(
value
=
"进口方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北"
,
required
=
false
)
private
Integer
dir
;
}
signal-optimize-service/src/main/java/net/wanji/opt/dto/OptDataExtend.java
0 → 100644
View file @
6c87b648
package
net
.
wanji
.
opt
.
dto
;
import
lombok.Data
;
/**
*
* @author Kent HAN
* @date 2022/12/20 10:17
*/
@Data
public
class
OptDataExtend
{
private
String
sceneName
;
private
String
strategyName
;
private
String
ideaName
;
}
signal-optimize-service/src/main/java/net/wanji/opt/po/CrossDataHistPO.java
0 → 100644
View file @
6c87b648
package
net
.
wanji
.
opt
.
po
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.util.Date
;
/**
* @author hanbing
* @date 2023/1/10 16:36
* @desc CrossDataRealtimePO
*/
@Data
public
class
CrossDataHistPO
{
/** 路口编号 */
@ApiModelProperty
(
name
=
"路口编号"
,
notes
=
""
)
private
String
crossId
;
/** 路口状态:0正常;1失衡;2拥堵;3溢出;4死锁 */
@ApiModelProperty
(
name
=
"路口状态:0正常;1失衡;2拥堵;3溢出;4死锁"
,
notes
=
""
)
private
Integer
status
;
/** 拥堵类型:1常规;2异常 */
@ApiModelProperty
(
name
=
"拥堵类型:1常规;2异常"
,
notes
=
""
)
private
Integer
type
;
/** 交通指数(1~10) */
@ApiModelProperty
(
name
=
"交通指数(1~10)"
,
notes
=
""
)
private
Double
trafficIndex
;
/** 开始时间:yyyy-MM-dd HH;mm:ss */
@ApiModelProperty
(
name
=
"开始时间:yyyy-MM-dd HH"
,
notes
=
"mm:ss"
)
private
Date
startTime
;
/** 持续时间(单位:分钟) */
@ApiModelProperty
(
name
=
"持续时间(单位:分钟)"
,
notes
=
""
)
private
Integer
duration
;
/** 是否失衡:0否;1是 */
@ApiModelProperty
(
name
=
"是否失衡:0否;1是"
,
notes
=
""
)
private
Integer
isUnbalance
;
/** 是否溢出:0否;1是 */
@ApiModelProperty
(
name
=
"是否溢出:0否;1是"
,
notes
=
""
)
private
Integer
isSpillover
;
/** 是否拥堵:0否;1是 */
@ApiModelProperty
(
name
=
"是否拥堵:0否;1是"
,
notes
=
""
)
private
Integer
isCongestion
;
/** 失衡指数 */
@ApiModelProperty
(
name
=
"失衡指数"
,
notes
=
""
)
private
Double
unbalanceIndex
;
/** 溢出指数 */
@ApiModelProperty
(
name
=
"溢出指数"
,
notes
=
""
)
private
Double
spilloverIndex
;
/** 拥堵指数 */
@ApiModelProperty
(
name
=
"拥堵指数"
,
notes
=
""
)
private
Double
congestionIndex
;
/** 路口失衡方向:1,2,3... */
@ApiModelProperty
(
name
=
"路口失衡方向:1,2,3..."
,
notes
=
""
)
private
String
unbalanceDirs
;
/** 路口溢出方向:1,2,3... */
@ApiModelProperty
(
name
=
"路口溢出方向:1,2,3..."
,
notes
=
""
)
private
String
spilloverDirs
;
/** 路口拥堵方向:1,2,3... */
@ApiModelProperty
(
name
=
"路口拥堵方向:1,2,3..."
,
notes
=
""
)
private
String
congestionDirs
;
/** 交通流量(辆) */
@ApiModelProperty
(
name
=
"交通流量(辆)"
,
notes
=
""
)
private
Integer
flow
;
/** 交通流率/h */
@ApiModelProperty
(
name
=
"交通流率/h"
,
notes
=
""
)
private
Double
flowRate
;
/** 平均速度(km/h) */
@ApiModelProperty
(
name
=
"平均速度(km/h)"
,
notes
=
""
)
private
Double
speed
;
/** 最大排队(米) */
@ApiModelProperty
(
name
=
"最大排队(米)"
,
notes
=
""
)
private
Double
queueLength
;
/** 停车次数(次) */
@ApiModelProperty
(
name
=
"停车次数(次)"
,
notes
=
""
)
private
Double
stopTimes
;
/** 延误时间(秒) */
@ApiModelProperty
(
name
=
"延误时间(秒)"
,
notes
=
""
)
private
Integer
delayTime
;
/** 饱和度 */
@ApiModelProperty
(
name
=
"饱和度"
,
notes
=
""
)
private
Double
sturation
;
/** 采集时间(10位时间戳) */
@ApiModelProperty
(
name
=
"采集时间(10位时间戳)"
,
notes
=
""
)
private
Integer
batchTime
;
/** 创建时间 */
@ApiModelProperty
(
name
=
"创建时间"
,
notes
=
""
)
private
Date
gmtCreate
;
/** 修改时间 */
@ApiModelProperty
(
name
=
"修改时间"
,
notes
=
""
)
private
Date
gmtModified
;
}
signal-optimize-service/src/main/java/net/wanji/opt/po/trend/CrossDirDataHistPO.java
View file @
6c87b648
...
...
@@ -53,7 +53,7 @@ public class CrossDirDataHistPO {
private
Double
sturation
;
/** 采集时间(10位时间戳) */
@ApiModelProperty
(
name
=
"采集时间(10位时间戳)"
,
notes
=
""
)
private
Long
batchTime
;
private
Integer
batchTime
;
/** 创建时间 */
@ApiModelProperty
(
name
=
"创建时间"
,
notes
=
""
)
private
Date
gmtCreate
;
...
...
signal-optimize-service/src/main/java/net/wanji/opt/service/DiagnoService.java
View file @
6c87b648
package
net
.
wanji
.
opt
.
service
;
import
net.wanji.common.dto.CrossIdDTO
;
import
net.wanji.opt.dto.CrossIdAndDirDTO
;
import
net.wanji.opt.dto.CrossIdAndSchemeIdDTO
;
import
net.wanji.opt.dto.SendManualDTO
;
import
net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO
;
import
net.wanji.opt.vo.CrossIdAndLocationVO
;
import
net.wanji.opt.vo.OptEffectVO
;
import
net.wanji.opt.vo.SchemeOptVO
;
import
java.util.List
;
...
...
@@ -25,4 +27,6 @@ public interface DiagnoService {
void
sendManual
(
SendManualDTO
sendManualDTO
)
throws
Exception
;
void
restoreSend
(
CrossIdDTO
crossIdDTO
)
throws
Exception
;
OptEffectVO
optEffect
(
CrossIdAndDirDTO
crossIdAndDirDTO
);
}
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/DiagnoServiceImpl.java
View file @
6c87b648
package
net
.
wanji
.
opt
.
service
.
impl
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.github.pagehelper.PageInfo
;
import
com.google.gson.Gson
;
import
com.google.gson.GsonBuilder
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.dto.CrossIdDTO
;
import
net.wanji.common.utils.tool.CrossUtil
;
import
net.wanji.databus.dao.entity.RidInfoEntity
;
import
net.wanji.databus.dao.mapper.RidInfoMapper
;
import
net.wanji.feign.pojo.vo.SchemeSendVO
;
import
net.wanji.opt.dao.mapper.CrossDataHistMapper
;
import
net.wanji.opt.dao.mapper.CrossDirInfoMapper
;
import
net.wanji.opt.dao.mapper.CrossInfoMapper
;
import
net.wanji.opt.dao.mapper.CrossPhaseMapper
;
...
...
@@ -14,32 +19,36 @@ import net.wanji.opt.dao.mapper.CrossSchemeMapper;
import
net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper
;
import
net.wanji.opt.dao.mapper.strategy.SceneMapper
;
import
net.wanji.opt.dao.mapper.trend.CrossDataRealtimeMapper
;
import
net.wanji.opt.dao.mapper.trend.CrossDirDataHistMapper
;
import
net.wanji.opt.dto.CrossIdAndDirDTO
;
import
net.wanji.opt.dto.CrossIdAndSchemeIdDTO
;
import
net.wanji.opt.dto.OptDataExtend
;
import
net.wanji.opt.dto.SendManualDTO
;
import
net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO
;
import
net.wanji.opt.dto.strategy.QuerySceneDTO
;
import
net.wanji.opt.po.CrossDataHistPO
;
import
net.wanji.opt.po.base.CrossInfoPO
;
import
net.wanji.opt.po.base.CrossPhasePO
;
import
net.wanji.opt.po.base.CrossSchemeOptLogPO
;
import
net.wanji.opt.po.base.CrossSchemePO
;
import
net.wanji.opt.po.strategy.ScenePO
;
import
net.wanji.opt.po.trend.CrossDataRealtimePO
;
import
net.wanji.opt.po.trend.CrossDirDataHistPO
;
import
net.wanji.opt.service.DiagnoService
;
import
net.wanji.opt.service.signalcontrol.FeignProxyService
;
import
net.wanji.opt.service.strategy.SceneService
;
import
net.wanji.opt.vo.CrossIdAndLocationVO
;
import
net.wanji.opt.vo.OptEffectVO
;
import
net.wanji.opt.vo.SchemeOptSendVO
;
import
net.wanji.opt.vo.SchemeOptVO
;
import
org.jetbrains.annotations.NotNull
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.
Comparator
;
import
java.util.
Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.Optional
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -60,12 +69,16 @@ public class DiagnoServiceImpl implements DiagnoService {
private
final
CrossSchemeMapper
crossSchemeMapper
;
private
final
CrossPhaseMapper
crossPhaseMapper
;
private
final
FeignProxyService
feignProxyService
;
private
final
CrossDataHistMapper
crossDataHistMapper
;
private
final
CrossDirDataHistMapper
crossDirDataHistMapper
;
private
Gson
gson
=
new
GsonBuilder
().
setDateFormat
(
"yyyy-MM-dd HH:mm:ss"
).
create
();
public
DiagnoServiceImpl
(
CrossInfoMapper
crossInfoMapper
,
CrossDataRealtimeMapper
crossDataRealtimeMapper
,
SceneService
sceneService
,
SceneMapper
sceneMapper
,
CrossDirInfoMapper
crossDirInfoMapper
,
RidInfoMapper
ridInfoMapper
,
CrossSchemeOptLogMapper
crossSchemeOptLogMapper
,
CrossSchemeMapper
crossSchemeMapper
,
CrossPhaseMapper
crossPhaseMapper
,
FeignProxyService
feignProxyService
)
{
FeignProxyService
feignProxyService
,
CrossDataHistMapper
crossDataHistMapper
,
CrossDirDataHistMapper
crossDirDataHistMapper
)
{
this
.
crossInfoMapper
=
crossInfoMapper
;
this
.
crossDataRealtimeMapper
=
crossDataRealtimeMapper
;
this
.
sceneService
=
sceneService
;
...
...
@@ -76,6 +89,8 @@ public class DiagnoServiceImpl implements DiagnoService {
this
.
crossSchemeMapper
=
crossSchemeMapper
;
this
.
crossPhaseMapper
=
crossPhaseMapper
;
this
.
feignProxyService
=
feignProxyService
;
this
.
crossDataHistMapper
=
crossDataHistMapper
;
this
.
crossDirDataHistMapper
=
crossDirDataHistMapper
;
}
@Override
...
...
@@ -132,11 +147,8 @@ public class DiagnoServiceImpl implements DiagnoService {
String
crossId
=
crossIdDTO
.
getCrossId
();
SchemeOptVO
schemeOptVO
=
new
SchemeOptVO
();
schemeOptVO
.
setCrossId
(
crossId
);
List
<
CrossSchemeOptLogPO
>
crossSchemeOptLogPOList
=
crossSchemeOptLogMapper
.
selectByCrossId
(
crossId
);
// 选择数据批次时间最大的记录
Optional
<
CrossSchemeOptLogPO
>
max
=
crossSchemeOptLogPOList
.
stream
()
.
max
(
Comparator
.
comparing
(
CrossSchemeOptLogPO:
:
getDataBatchTime
));
List
<
CrossSchemeOptLogPO
>
maxList
=
getMaxList
(
crossSchemeOptLogPOList
,
max
);
List
<
CrossSchemeOptLogPO
>
maxList
=
crossSchemeOptLogMapper
.
selectMaxByCrossId
(
crossId
);
CrossSchemeOptLogPO
crossSchemeOptLogPO
=
maxList
.
get
(
0
);
String
optType
=
crossSchemeOptLogPO
.
getOptType
();
schemeOptVO
.
setOptType
(
Integer
.
parseInt
(
optType
));
...
...
@@ -156,11 +168,8 @@ public class DiagnoServiceImpl implements DiagnoService {
String
crossId
=
crossIdAndSchemeIdDTO
.
getCrossId
();
Integer
schemeId
=
crossIdAndSchemeIdDTO
.
getSchemeId
();
List
<
SchemeOptVO
.
PhaseOptTime
>
phaseOptTimeList
=
new
ArrayList
<>();
List
<
CrossSchemeOptLogPO
>
crossSchemeOptLogPOList
=
crossSchemeOptLogMapper
.
selectByCrossId
(
crossId
);
// 选择数据批次时间最大的记录
Optional
<
CrossSchemeOptLogPO
>
max
=
crossSchemeOptLogPOList
.
stream
()
.
max
(
Comparator
.
comparing
(
CrossSchemeOptLogPO:
:
getDataBatchTime
));
List
<
CrossSchemeOptLogPO
>
maxList
=
getMaxList
(
crossSchemeOptLogPOList
,
max
);
List
<
CrossSchemeOptLogPO
>
maxList
=
crossSchemeOptLogMapper
.
selectMaxByCrossId
(
crossId
);
for
(
CrossSchemeOptLogPO
crossSchemeOptLogPO
:
maxList
)
{
SchemeOptVO
.
PhaseOptTime
phaseOptTime
=
new
SchemeOptVO
.
PhaseOptTime
();
String
phaseNo
=
crossSchemeOptLogPO
.
getPhaseNo
();
...
...
@@ -284,6 +293,114 @@ public class DiagnoServiceImpl implements DiagnoService {
feignProxyService
.
schemeOptRestore
(
crossId
);
}
@Override
public
OptEffectVO
optEffect
(
CrossIdAndDirDTO
crossIdAndDirDTO
)
{
String
crossId
=
crossIdAndDirDTO
.
getCrossId
();
OptEffectVO
optEffectVO
=
new
OptEffectVO
();
CrossInfoPO
crossInfoPO
=
crossInfoMapper
.
selectById
(
crossId
);
optEffectVO
.
setCrossName
(
crossInfoPO
.
getName
());
List
<
CrossSchemeOptLogPO
>
maxList
=
crossSchemeOptLogMapper
.
selectMaxByCrossId
(
crossId
);
CrossSchemeOptLogPO
crossSchemeOptLogPO
=
maxList
.
get
(
0
);
String
dataExtend
=
crossSchemeOptLogPO
.
getDataExtend
();
OptDataExtend
optDataExtend
=
gson
.
fromJson
(
dataExtend
,
OptDataExtend
.
class
);
optEffectVO
.
setSceneName
(
optDataExtend
.
getSceneName
());
optEffectVO
.
setStrategyName
(
optDataExtend
.
getStrategyName
());
optEffectVO
.
setIdeaName
(
optDataExtend
.
getIdeaName
());
optEffectVO
.
setOptStartTime
(
crossSchemeOptLogPO
.
getStartTime
());
Date
endTime
=
crossSchemeOptLogPO
.
getEndTime
();
if
(
ObjectUtil
.
isEmpty
(
endTime
))
{
optEffectVO
.
setStatus
(
2
);
}
else
{
optEffectVO
.
setStatus
(
1
);
}
Integer
dir
=
crossIdAndDirDTO
.
getDir
();
// 获取当前时间之前45分钟的10位时间戳
long
currentSeconds
=
DateUtil
.
currentSeconds
();
// todo 测试用 固定当前时间为1676082600
currentSeconds
=
1676082600
;
long
preSeconds
=
currentSeconds
-
45
*
60
;
if
(
ObjectUtil
.
isEmpty
(
dir
)
||
dir
==
0
)
{
// 获取路口历史数据
List
<
CrossDataHistPO
>
crossDataHistPOList
=
crossDataHistMapper
.
selectByCrossIdAndTimestamp
(
crossId
,
preSeconds
);
List
<
OptEffectVO
.
IndexDelay
>
indexDelayList
=
buildIndexDelayList
(
crossDataHistPOList
);
optEffectVO
.
setIndexDelayList
(
indexDelayList
);
List
<
OptEffectVO
.
QueueStop
>
queueStopList
=
buildQueueStopList
(
crossDataHistPOList
);
optEffectVO
.
setQueueStopList
(
queueStopList
);
}
else
{
// 获取路口方向历史数据
List
<
CrossDirDataHistPO
>
crossDirDataHistPOList
=
crossDirDataHistMapper
.
selectByCrossIdDirAndTimestamp
(
crossId
,
dir
,
preSeconds
);
List
<
OptEffectVO
.
IndexDelay
>
indexDelayList
=
buildIndexDelayListDir
(
crossDirDataHistPOList
);
optEffectVO
.
setIndexDelayList
(
indexDelayList
);
List
<
OptEffectVO
.
QueueStop
>
queueStopList
=
buildQueueStopListDir
(
crossDirDataHistPOList
);
optEffectVO
.
setQueueStopList
(
queueStopList
);
}
return
optEffectVO
;
}
private
List
<
OptEffectVO
.
QueueStop
>
buildQueueStopListDir
(
List
<
CrossDirDataHistPO
>
crossDirDataHistPOList
)
{
List
<
OptEffectVO
.
QueueStop
>
queueStopList
=
new
ArrayList
<>();
for
(
CrossDirDataHistPO
crossDirDataHistPO
:
crossDirDataHistPOList
)
{
OptEffectVO
.
QueueStop
queueStop
=
new
OptEffectVO
.
QueueStop
();
// 获取采集时间
Integer
batchTime
=
crossDirDataHistPO
.
getBatchTime
();
Date
date
=
DateUtil
.
date
(
batchTime
*
1000
);
queueStop
.
setTime
(
date
);
queueStop
.
setQueue
(
crossDirDataHistPO
.
getQueueLength
());
queueStop
.
setStop
(
crossDirDataHistPO
.
getStopTimes
());
queueStopList
.
add
(
queueStop
);
}
return
queueStopList
;
}
private
List
<
OptEffectVO
.
IndexDelay
>
buildIndexDelayListDir
(
List
<
CrossDirDataHistPO
>
crossDirDataHistPOList
)
{
List
<
OptEffectVO
.
IndexDelay
>
indexDelayList
=
new
ArrayList
<>();
for
(
CrossDirDataHistPO
crossDirDataHistPO
:
crossDirDataHistPOList
)
{
OptEffectVO
.
IndexDelay
indexDelay
=
new
OptEffectVO
.
IndexDelay
();
// 获取采集时间
Integer
batchTime
=
crossDirDataHistPO
.
getBatchTime
();
Date
date
=
DateUtil
.
date
(
batchTime
*
1000
);
indexDelay
.
setTime
(
date
);
indexDelay
.
setIndex
(
crossDirDataHistPO
.
getTrafficIndex
());
indexDelay
.
setDelay
(
crossDirDataHistPO
.
getDelayTime
());
indexDelayList
.
add
(
indexDelay
);
}
return
indexDelayList
;
}
private
List
<
OptEffectVO
.
QueueStop
>
buildQueueStopList
(
List
<
CrossDataHistPO
>
crossDataHistPOList
)
{
List
<
OptEffectVO
.
QueueStop
>
queueStopList
=
new
ArrayList
<>();
for
(
CrossDataHistPO
crossDataHistPO
:
crossDataHistPOList
)
{
OptEffectVO
.
QueueStop
queueStop
=
new
OptEffectVO
.
QueueStop
();
// 获取采集时间
Integer
batchTime
=
crossDataHistPO
.
getBatchTime
();
Date
date
=
DateUtil
.
date
(
batchTime
*
1000
);
queueStop
.
setTime
(
date
);
queueStop
.
setQueue
(
crossDataHistPO
.
getQueueLength
());
queueStop
.
setStop
(
crossDataHistPO
.
getStopTimes
());
queueStopList
.
add
(
queueStop
);
}
return
queueStopList
;
}
private
List
<
OptEffectVO
.
IndexDelay
>
buildIndexDelayList
(
List
<
CrossDataHistPO
>
crossDataHistPOList
)
{
List
<
OptEffectVO
.
IndexDelay
>
indexDelayList
=
new
ArrayList
<>();
for
(
CrossDataHistPO
crossDataHistPO
:
crossDataHistPOList
)
{
OptEffectVO
.
IndexDelay
indexDelay
=
new
OptEffectVO
.
IndexDelay
();
// 获取采集时间
Integer
batchTime
=
crossDataHistPO
.
getBatchTime
();
Date
date
=
DateUtil
.
date
(
batchTime
*
1000
);
indexDelay
.
setTime
(
date
);
indexDelay
.
setIndex
(
crossDataHistPO
.
getTrafficIndex
());
indexDelay
.
setDelay
(
crossDataHistPO
.
getDelayTime
());
indexDelayList
.
add
(
indexDelay
);
}
return
indexDelayList
;
}
private
Integer
getNewGreenTime
(
String
crossId
,
Integer
schemeId
,
String
phaseNo
)
{
List
<
CrossPhasePO
>
crossPhasePOList
=
crossPhaseMapper
.
listCrossPhase
(
crossId
,
String
.
valueOf
(
schemeId
));
for
(
CrossPhasePO
crossPhasePO
:
crossPhasePOList
)
{
...
...
@@ -295,19 +412,6 @@ public class DiagnoServiceImpl implements DiagnoService {
return
0
;
}
@NotNull
private
static
List
<
CrossSchemeOptLogPO
>
getMaxList
(
List
<
CrossSchemeOptLogPO
>
crossSchemeOptLogPOList
,
Optional
<
CrossSchemeOptLogPO
>
max
)
{
int
maxBatchTime
=
max
.
get
().
getDataBatchTime
();
List
<
CrossSchemeOptLogPO
>
maxList
=
new
ArrayList
<>();
for
(
CrossSchemeOptLogPO
crossSchemeOptLogPO
:
crossSchemeOptLogPOList
)
{
int
dataBatchTime
=
crossSchemeOptLogPO
.
getDataBatchTime
();
if
(
dataBatchTime
==
maxBatchTime
)
{
maxList
.
add
(
crossSchemeOptLogPO
);
}
}
return
maxList
;
}
private
List
<
SchemeOptVO
.
PhaseOptTime
>
buildPhaseOptTimeList
(
List
<
CrossSchemeOptLogPO
>
crossSchemeOptLogPOList
)
{
List
<
SchemeOptVO
.
PhaseOptTime
>
phaseOptTimeList
=
new
ArrayList
<>();
...
...
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/TrendServiceImpl.java
View file @
6c87b648
...
...
@@ -276,7 +276,7 @@ public class TrendServiceImpl implements TrendService {
AbnormalCrossDetailVO
.
DirDataElement
dirDataElement
=
new
AbnormalCrossDetailVO
.
DirDataElement
();
dirDataElement
.
setDir
(
crossDirDataHistPO
.
getDirType
());
// 获取采集时间
Long
batchTime
=
crossDirDataHistPO
.
getBatchTime
();
Integer
batchTime
=
crossDirDataHistPO
.
getBatchTime
();
Date
date
=
DateUtil
.
date
(
batchTime
*
1000
);
dirDataElement
.
setTime
(
date
);
// 转换状态,3、4都算拥堵
...
...
signal-optimize-service/src/main/java/net/wanji/opt/vo/OptEffectVO.java
0 → 100644
View file @
6c87b648
package
net
.
wanji
.
opt
.
vo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.Date
;
import
java.util.List
;
/**
* @author Kent HAN
* @date 2023/2/9 8:38
*/
@Data
@NoArgsConstructor
@ApiModel
(
value
=
"OptEffectVO"
,
description
=
"查询优化效果返回值"
)
public
class
OptEffectVO
{
@ApiModelProperty
(
value
=
"路口名称"
)
String
crossName
;
@ApiModelProperty
(
value
=
"场景"
)
String
sceneName
;
@ApiModelProperty
(
value
=
"应用策略"
)
String
strategyName
;
@ApiModelProperty
(
value
=
"优化方法"
)
String
ideaName
;
@ApiModelProperty
(
value
=
"优化开始时间 格式2023-03-02 10:10"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"yyyy-MM-dd HH:mm"
,
timezone
=
"GMT+8"
)
Date
optStartTime
;
@ApiModelProperty
(
value
=
"状态 1已完成 2优化中"
)
Integer
status
;
@ApiModelProperty
(
value
=
"拥堵指数延误折线图"
)
List
<
IndexDelay
>
indexDelayList
;
@ApiModelProperty
(
value
=
"最大排队长度平均停车次数折线图"
)
List
<
QueueStop
>
queueStopList
;
@Data
@NoArgsConstructor
@ApiModel
(
value
=
"IndexDelay"
,
description
=
"拥堵指数延误折线图元素"
)
public
static
class
IndexDelay
{
@ApiModelProperty
(
value
=
"时间 格式14:00"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"HH:mm"
,
timezone
=
"GMT+8"
)
Date
time
;
@ApiModelProperty
(
value
=
"拥堵指数"
)
Double
index
;
@ApiModelProperty
(
value
=
"延误"
)
Integer
delay
;
}
@Data
@NoArgsConstructor
@ApiModel
(
value
=
"QueueStop"
,
description
=
"最大排队长度平均停车次数折线图元素"
)
public
static
class
QueueStop
{
@ApiModelProperty
(
value
=
"时间 格式14:00"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"HH:mm"
,
timezone
=
"GMT+8"
)
Date
time
;
@ApiModelProperty
(
value
=
"最大排队长度"
)
Double
queue
;
@ApiModelProperty
(
value
=
"平均停车次数"
)
Double
stop
;
}
}
signal-optimize-service/src/main/resources/mapper/CrossDataHistMapper.xml
0 → 100644
View file @
6c87b648
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"net.wanji.opt.dao.mapper.CrossDataHistMapper"
>
<select
id=
"selectByCrossIdAndTimestamp"
resultType=
"net.wanji.opt.po.CrossDataHistPO"
>
select
cross_id,status,type,traffic_index,start_time,duration,is_unbalance,is_spillover,is_congestion,unbalance_index,spillover_index,congestion_index,unbalance_dirs,spillover_dirs,congestion_dirs,flow,flow_rate,speed,queue_length,stop_times,delay_time,sturation,batch_time,gmt_create,gmt_modified
from t_cross_data_hist
where cross_id = #{crossId}
and batch_time
<![CDATA[ >= ]]>
#{preSeconds}
order by batch_time
</select>
</mapper>
signal-optimize-service/src/main/resources/mapper/CrossSchemeOptLogMapper.xml
View file @
6c87b648
...
...
@@ -45,6 +45,14 @@
</where>
</select>
<select
id=
"selectMaxByCrossId"
resultType=
"net.wanji.opt.po.base.CrossSchemeOptLogPO"
>
select
<include
refid=
"Base_Column_List"
/>
from t_base_cross_scheme_opt_log
where cross_id = #{crossId}
and data_batch_time=(SELECT MAX(ABS(data_batch_time)) FROM t_base_cross_scheme_opt_log);
</select>
<insert
id=
"insertOne"
parameterType=
"net.wanji.opt.po.base.CrossSchemeOptLogPO"
>
insert into t_base_cross_scheme_opt_log (cross_id, scheme_no, dir_type, turn_type, offset, ring_no, phase_no,
phase_order_id, ori_green_time, opt_time, opt_type, opt_reason,
...
...
signal-optimize-service/src/main/resources/mapper/trend/CrossDirDataHist.xml
View file @
6c87b648
...
...
@@ -11,4 +11,13 @@
and batch_time
<![CDATA[ >= ]]>
#{preSeconds}
order by batch_time
</select>
<select
id=
"selectByCrossIdDirAndTimestamp"
resultType=
"net.wanji.opt.po.trend.CrossDirDataHistPO"
>
select
id,dir_type,in_out_type,cross_id,length,status,traffic_index,flow,speed,queue_length,stop_times,delay_time,sturation,batch_time,gmt_create,gmt_modified
from t_cross_dir_data_hist
where cross_id = #{crossId} and in_out_type = 1 and dir_type = #{dir}
and batch_time
<![CDATA[ >= ]]>
#{preSeconds}
order by batch_time
</select>
</mapper>
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