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
jinan
traffic-signal-platform
Commits
5deaf475
Commit
5deaf475
authored
Jan 07, 2025
by
duanruiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[add] 优化监测-问题诊断优化
parent
a0f14a10
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
125 additions
and
46 deletions
+125
-46
EventInfoTypeEnum.java
...in/java/net/wanji/opt/common/enums/EventInfoTypeEnum.java
+40
-0
CrossIndexController.java
.../wanji/opt/controller/signalopt/CrossIndexController.java
+6
-5
CrossIndexService.java
...rc/main/java/net/wanji/opt/service/CrossIndexService.java
+2
-2
CrossIndexServiceImpl.java
...ava/net/wanji/opt/service/impl/CrossIndexServiceImpl.java
+44
-24
CrossStatusCountVO.java
...ce/src/main/java/net/wanji/opt/vo/CrossStatusCountVO.java
+33
-0
crossStatusCountVO.java
...ce/src/main/java/net/wanji/opt/vo/crossStatusCountVO.java
+0
-15
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/common/enums/EventInfoTypeEnum.java
0 → 100644
View file @
5deaf475
package
net
.
wanji
.
opt
.
common
.
enums
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
net.wanji.common.utils.tool.StringUtils
;
/**
* @author duanruiming
* @date 2025/01/07 20:24
*/
@Getter
@AllArgsConstructor
public
enum
EventInfoTypeEnum
{
// 事件类型转化
PHASE_EMPTY
(
5
,
"701"
,
"相位空放"
),
CROSS_UNBALANCE
(
1
,
"702"
,
"路口失衡"
),
CROSS_OVERFLOW
(
3
,
"703"
,
"路口溢出"
),
CROSS_DEADLOCK
(
4
,
"704"
,
"路口死锁"
),
GREEN_SLOW
(
6
,
"705"
,
"干线-缓行"
),
GREEN_CONGEST
(
7
,
"706"
,
"干线-拥堵"
),
CROSS_CONGEST
(
2
,
"707"
,
"路口拥堵"
);
private
Integer
optType
;
private
String
eventType
;
private
String
desc
;
/**
* 通过事件类型获取优化类型
* @param eventType
* @return
*/
public
static
Integer
getOptType
(
String
eventType
)
{
for
(
EventInfoTypeEnum
value
:
EventInfoTypeEnum
.
values
())
{
if
(
StringUtils
.
equalsIgnoreCase
(
eventType
,
value
.
getEventType
()))
{
return
value
.
getOptType
();
}
}
return
null
;
}
}
signal-optimize-service/src/main/java/net/wanji/opt/controller/signalopt/CrossIndexController.java
View file @
5deaf475
...
...
@@ -15,11 +15,12 @@ import net.wanji.opt.po.trend.HoloEventInfoPO;
import
net.wanji.opt.service.CrossIndexService
;
import
net.wanji.opt.vo.AIOptResultVO
;
import
net.wanji.opt.vo.CrossOptResult
;
import
net.wanji.opt.vo.
c
rossStatusCountVO
;
import
net.wanji.opt.vo.
C
rossStatusCountVO
;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.Resource
;
import
javax.ws.rs.core.MediaType
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -104,20 +105,20 @@ public class CrossIndexController {
return
JsonViewObject
.
newInstance
().
success
(
results
);
}
@ApiOperation
(
value
=
"问题诊断"
,
notes
=
"优化监测-问题诊断"
,
response
=
JsonViewObject
.
class
,
@ApiOperation
(
value
=
"
优化监测-
问题诊断"
,
notes
=
"优化监测-问题诊断"
,
response
=
JsonViewObject
.
class
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@GetMapping
(
value
=
"/crossStatusCount"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
AddOrUpdateSceneDTO
.
class
),
})
public
JsonViewObject
crossStatusCount
(
String
crossId
)
{
crossStatusCountVO
result
=
new
crossStatusCountVO
();
List
<
CrossStatusCountVO
>
results
=
new
ArrayList
<>
();
try
{
result
=
crossIndexService
.
crossStatusCount
(
crossId
);
result
s
=
crossIndexService
.
crossStatusCount
(
crossId
);
}
catch
(
Exception
e
)
{
JsonViewObject
.
newInstance
().
fail
(
"优化监测-问题诊断"
);
}
return
JsonViewObject
.
newInstance
().
success
(
result
);
return
JsonViewObject
.
newInstance
().
success
(
result
s
);
}
@ApiOperation
(
value
=
"交通体检-路口监测-事件方向转向"
,
notes
=
"交通体检-路口监测-事件方向转向"
,
response
=
JsonViewObject
.
class
,
...
...
signal-optimize-service/src/main/java/net/wanji/opt/service/CrossIndexService.java
View file @
5deaf475
...
...
@@ -8,7 +8,7 @@ import net.wanji.databus.po.TBaseCrossInfo;
import
net.wanji.opt.po.trend.HoloEventInfoPO
;
import
net.wanji.opt.vo.AIOptResultVO
;
import
net.wanji.opt.vo.CrossOptResult
;
import
net.wanji.opt.vo.
c
rossStatusCountVO
;
import
net.wanji.opt.vo.
C
rossStatusCountVO
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -28,7 +28,7 @@ public interface CrossIndexService {
List
<
AIOptResultVO
>
crossAIList
()
throws
Exception
;
crossStatusCountVO
crossStatusCount
(
String
crossId
)
;
List
<
CrossStatusCountVO
>
crossStatusCount
(
String
crossId
)
throws
Exception
;
HoloEventInfoPO
crossEventDirTurn
(
String
crossId
)
throws
Exception
;
/**
...
...
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/CrossIndexServiceImpl.java
View file @
5deaf475
...
...
@@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.utils.tool.LocalDateTimeUtil
;
import
net.wanji.common.utils.tool.StringUtils
;
import
net.wanji.databus.bo.CrossIdBO
;
import
net.wanji.databus.dao.mapper.BaseCrossInfoMapper
;
import
net.wanji.databus.dao.mapper.CrossDataRealtimeMapper
;
...
...
@@ -11,6 +12,7 @@ import net.wanji.databus.dao.mapper.CrossDirDataHistMapper;
import
net.wanji.databus.dao.mapper.CrossDirDataRealtimeMapper
;
import
net.wanji.databus.po.*
;
import
net.wanji.opt.common.enums.CrossOptResultStrategyEnum
;
import
net.wanji.opt.common.enums.EventInfoTypeEnum
;
import
net.wanji.opt.common.enums.OptStatusEnum
;
import
net.wanji.opt.common.enums.StrategyControlEnum
;
import
net.wanji.opt.dao.mapper.HoloEventMapper
;
...
...
@@ -20,7 +22,8 @@ import net.wanji.opt.service.CrossIndexService;
import
net.wanji.opt.synthesis.pojo.StrategyCrossResultEntity
;
import
net.wanji.opt.vo.AIOptResultVO
;
import
net.wanji.opt.vo.CrossOptResult
;
import
net.wanji.opt.vo.crossStatusCountVO
;
import
net.wanji.opt.vo.CrossStatusCountVO
;
import
org.apache.curator.drivers.EventTrace
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
...
...
@@ -158,32 +161,49 @@ public class CrossIndexServiceImpl implements CrossIndexService {
}
@Override
public
crossStatusCountVO
crossStatusCount
(
String
crossId
)
{
LocalDate
currentDate
=
LocalDate
.
now
();
LocalTime
startTime
=
LocalTime
.
MIDNIGHT
;
LocalDateTime
startOfDay
=
LocalDateTime
.
of
(
currentDate
,
startTime
);
LambdaQueryWrapper
<
StrategyCrossResultEntity
>
queryWrapper
=
new
LambdaQueryWrapper
<>();
queryWrapper
.
eq
(
StrategyCrossResultEntity:
:
getCrossId
,
crossId
);
queryWrapper
.
ge
(
StrategyCrossResultEntity:
:
getIssueTime
,
startOfDay
);
List
<
StrategyCrossResultEntity
>
list
=
strategyCrossResultMapper
.
selectList
(
queryWrapper
);
crossStatusCountVO
crossStatusCountVO
=
new
crossStatusCountVO
();
if
(!
CollectionUtils
.
isEmpty
(
list
))
{
Map
<
Integer
,
List
<
StrategyCrossResultEntity
>>
listMap
=
list
.
stream
().
collect
(
Collectors
.
groupingBy
(
StrategyCrossResultEntity:
:
getCurrentAlgo
));
for
(
Map
.
Entry
<
Integer
,
List
<
StrategyCrossResultEntity
>>
entry
:
listMap
.
entrySet
())
{
Integer
currentAlgo
=
entry
.
getKey
();
List
<
StrategyCrossResultEntity
>
value
=
entry
.
getValue
();
if
(
Objects
.
equals
(
currentAlgo
,
CrossOptResultStrategyEnum
.
ONE
.
getCode
()))
{
crossStatusCountVO
.
setPhaseEmptyCount
(
value
.
size
());
}
if
(
Objects
.
equals
(
currentAlgo
,
CrossOptResultStrategyEnum
.
TWO
.
getCode
()))
{
crossStatusCountVO
.
setUnbalanceCount
(
value
.
size
());
}
if
(
Objects
.
equals
(
currentAlgo
,
CrossOptResultStrategyEnum
.
THREE
.
getCode
()))
{
crossStatusCountVO
.
setOverFlowCount
(
value
.
size
());
public
List
<
CrossStatusCountVO
>
crossStatusCount
(
String
crossId
)
throws
Exception
{
List
<
CrossStatusCountVO
>
results
=
new
ArrayList
<>();
try
{
LocalDate
currentDate
=
LocalDate
.
now
();
LocalTime
startTime
=
LocalTime
.
MIDNIGHT
;
LocalDateTime
startOfDay
=
LocalDateTime
.
of
(
currentDate
,
startTime
);
LambdaQueryWrapper
<
HoloEventInfoPO
>
queryWrapper
=
new
LambdaQueryWrapper
<>();
queryWrapper
.
eq
(
HoloEventInfoPO:
:
getCrossId
,
crossId
);
queryWrapper
.
ge
(
HoloEventInfoPO:
:
getStartTime
,
startOfDay
);
List
<
HoloEventInfoPO
>
holoEventInfoPOS
=
holoEventMapper
.
selectList
(
queryWrapper
);
if
(!
CollectionUtils
.
isEmpty
(
holoEventInfoPOS
))
{
Map
<
String
,
List
<
HoloEventInfoPO
>>
eventTypeMap
=
holoEventInfoPOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
HoloEventInfoPO:
:
getType
));
for
(
Map
.
Entry
<
String
,
List
<
HoloEventInfoPO
>>
entry
:
eventTypeMap
.
entrySet
())
{
String
eventType
=
entry
.
getKey
();
List
<
HoloEventInfoPO
>
value
=
entry
.
getValue
();
// 过滤干线
if
(
StringUtils
.
equalsIgnoreCase
(
eventType
,
EventInfoTypeEnum
.
GREEN_SLOW
.
getEventType
())
||
StringUtils
.
equalsIgnoreCase
(
eventType
,
EventInfoTypeEnum
.
GREEN_CONGEST
.
getEventType
()))
{
continue
;
}
// 当前事件返回实体
CrossStatusCountVO
crossStatusCountVO
=
new
CrossStatusCountVO
();
crossStatusCountVO
.
setType
(
EventInfoTypeEnum
.
getOptType
(
eventType
));
crossStatusCountVO
.
setCount
(
value
.
size
());
List
<
CrossStatusCountVO
.
DirTurn
>
dirTurns
=
new
ArrayList
<>();
if
(!
CollectionUtils
.
isEmpty
(
value
))
{
for
(
HoloEventInfoPO
holoEventInfoPO
:
value
)
{
CrossStatusCountVO
.
DirTurn
dirTurn
=
new
CrossStatusCountVO
.
DirTurn
();
dirTurn
.
setDir
(
holoEventInfoPO
.
getDir
());
dirTurn
.
setTurn
(
holoEventInfoPO
.
getTurn
());
dirTurns
.
add
(
dirTurn
);
}
}
crossStatusCountVO
.
setList
(
dirTurns
);
results
.
add
(
crossStatusCountVO
);
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"优化监测-问题诊断查询异常:"
,
e
);
throw
new
RuntimeException
(
e
);
}
return
crossStatusCountVO
;
return
results
;
}
@Override
...
...
signal-optimize-service/src/main/java/net/wanji/opt/vo/CrossStatusCountVO.java
0 → 100644
View file @
5deaf475
package
net
.
wanji
.
opt
.
vo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.util.List
;
/**
* @author duanruiming
* @date 2024/12/11 22:50
* 优化监测问题诊断实体
*/
@Data
@ApiModel
(
description
=
"优化监测问题诊断实体"
)
public
class
CrossStatusCountVO
{
@ApiModelProperty
(
"事件类型 1失衡;2拥堵;3溢出;5相位空放"
)
private
Integer
type
;
@ApiModelProperty
(
"发生次数"
)
private
Integer
count
;
@ApiModelProperty
(
"事件方向转向列表"
)
private
List
<
DirTurn
>
list
;
@Data
public
static
class
DirTurn
{
@ApiModelProperty
(
"方向1北.... 7西北"
)
private
String
dir
;
@ApiModelProperty
(
"转向 1左 2直 3右"
)
private
String
turn
;
}
}
signal-optimize-service/src/main/java/net/wanji/opt/vo/crossStatusCountVO.java
deleted
100644 → 0
View file @
a0f14a10
package
net
.
wanji
.
opt
.
vo
;
import
lombok.Data
;
/**
* @author duanruiming
* @date 2024/12/11 22:50
*/
@Data
public
class
crossStatusCountVO
{
private
int
overFlowCount
;
private
int
unbalanceCount
;
private
int
phaseEmptyCount
;
private
int
congestionCount
;
}
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