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
f81f05e0
Commit
f81f05e0
authored
Mar 03, 2023
by
hanbing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[add] 诊断优化,路口列表
parent
86d97bc5
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
413 additions
and
15 deletions
+413
-15
GlobalExceptionHandler.java
...et/wanji/opt/common/exception/GlobalExceptionHandler.java
+14
-2
DiagnoController.java
.../main/java/net/wanji/opt/controller/DiagnoController.java
+74
-0
IdeaController.java
...ava/net/wanji/opt/controller/strategy/IdeaController.java
+1
-1
SceneController.java
...va/net/wanji/opt/controller/strategy/SceneController.java
+2
-2
StrategyController.java
...net/wanji/opt/controller/strategy/StrategyController.java
+1
-1
CrossInfoMapper.java
...c/main/java/net/wanji/opt/dao/mapper/CrossInfoMapper.java
+4
-0
SceneMapper.java
...n/java/net/wanji/opt/dao/mapper/strategy/SceneMapper.java
+2
-0
CrossDataRealtimeMapper.java
...t/wanji/opt/dao/mapper/trend/CrossDataRealtimeMapper.java
+1
-1
DiagnoCrossListDTO.java
...e/src/main/java/net/wanji/opt/dto/DiagnoCrossListDTO.java
+20
-0
AddOrUpdateSceneDTO.java
.../java/net/wanji/opt/dto/strategy/AddOrUpdateSceneDTO.java
+2
-0
ScenePO.java
...vice/src/main/java/net/wanji/opt/po/strategy/ScenePO.java
+2
-0
DiagnoService.java
...ce/src/main/java/net/wanji/opt/service/DiagnoService.java
+21
-0
DiagnoServiceImpl.java
...in/java/net/wanji/opt/service/impl/DiagnoServiceImpl.java
+163
-0
TrendServiceImpl.java
...ain/java/net/wanji/opt/service/impl/TrendServiceImpl.java
+2
-1
SceneServiceImpl.java
...net/wanji/opt/service/strategy/impl/SceneServiceImpl.java
+11
-0
CrossMonitorTask.java
...ce/src/main/java/net/wanji/opt/task/CrossMonitorTask.java
+2
-2
AbnormalCrossDetailVO.java
...src/main/java/net/wanji/opt/vo/AbnormalCrossDetailVO.java
+2
-0
CrossIdAndLocationVO.java
.../src/main/java/net/wanji/opt/vo/CrossIdAndLocationVO.java
+23
-0
DiagnoCrossVO.java
...service/src/main/java/net/wanji/opt/vo/DiagnoCrossVO.java
+29
-0
CrossInfoMapper.xml
...ize-service/src/main/resources/mapper/CrossInfoMapper.xml
+19
-0
IdeaMapper.xml
...service/src/main/resources/mapper/strategy/IdeaMapper.xml
+1
-0
SceneMapper.xml
...ervice/src/main/resources/mapper/strategy/SceneMapper.xml
+15
-4
StrategyMapper.xml
...ice/src/main/resources/mapper/strategy/StrategyMapper.xml
+1
-0
CrossDataRealtimeMapper.xml
...c/main/resources/mapper/trend/CrossDataRealtimeMapper.xml
+1
-1
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/common/exception/GlobalExceptionHandler.java
View file @
f81f05e0
package
net
.
wanji
.
opt
.
common
.
exception
;
package
net
.
wanji
.
opt
.
common
.
exception
;
import
net.wanji.common.framework.rest.JsonViewObject
;
import
net.wanji.common.framework.rest.JsonViewObject
;
import
org.springframework.dao.DuplicateKeyException
;
import
org.springframework.validation.BindingResult
;
import
org.springframework.validation.BindingResult
;
import
org.springframework.validation.FieldError
;
import
org.springframework.validation.FieldError
;
import
org.springframework.validation.ObjectError
;
import
org.springframework.validation.ObjectError
;
...
@@ -32,11 +33,22 @@ public class GlobalExceptionHandler {
...
@@ -32,11 +33,22 @@ public class GlobalExceptionHandler {
return
jsonViewObject
.
fail
(
message
);
return
jsonViewObject
.
fail
(
message
);
}
}
@ExceptionHandler
(
value
=
Runtime
Exception
.
class
)
@ExceptionHandler
(
value
=
DuplicateKey
Exception
.
class
)
public
JsonViewObject
runtimeExceptionHandler
(
Runtime
Exception
e
)
{
public
JsonViewObject
duplicateKeyExceptionHandler
(
DuplicateKey
Exception
e
)
{
return
JsonViewObject
.
newInstance
().
fail
(
e
);
return
JsonViewObject
.
newInstance
().
fail
(
e
);
}
}
@ExceptionHandler
(
value
=
UniqueException
.
class
)
public
JsonViewObject
uniqueExceptionHandler
(
UniqueException
e
)
{
return
JsonViewObject
.
newInstance
().
fail
(
e
);
}
@ExceptionHandler
(
value
=
Exception
.
class
)
public
JsonViewObject
exceptionHandler
(
Exception
e
)
{
JsonViewObject
jsonViewObject
=
JsonViewObject
.
newInstance
();
return
jsonViewObject
.
fail
(
"服务器内部错误"
);
}
private
Map
<
String
,
String
>
getErrors
(
BindingResult
result
)
{
private
Map
<
String
,
String
>
getErrors
(
BindingResult
result
)
{
Map
<
String
,
String
>
map
=
new
HashMap
<>();
Map
<
String
,
String
>
map
=
new
HashMap
<>();
List
<
FieldError
>
list
=
result
.
getFieldErrors
();
List
<
FieldError
>
list
=
result
.
getFieldErrors
();
...
...
signal-optimize-service/src/main/java/net/wanji/opt/controller/DiagnoController.java
0 → 100644
View file @
f81f05e0
package
net
.
wanji
.
opt
.
controller
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
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.DiagnoCrossListDTO
;
import
net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO
;
import
net.wanji.opt.service.DiagnoService
;
import
net.wanji.opt.vo.CrossIdAndLocationVO
;
import
net.wanji.opt.vo.DiagnoCrossVO
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.validation.Valid
;
import
javax.ws.rs.core.MediaType
;
import
java.util.List
;
/**
* 诊断优化
*
* @author Kent HAN
*/
@Api
(
value
=
"DiagnoController"
,
description
=
"诊断优化"
)
@RequestMapping
(
"/diagno"
)
@RestController
public
class
DiagnoController
{
private
final
DiagnoService
diagnoService
;
public
DiagnoController
(
DiagnoService
diagnoService
)
{
this
.
diagnoService
=
diagnoService
;
}
@ApiOperation
(
value
=
"路口列表"
,
notes
=
"路口列表"
,
response
=
JsonViewObject
.
class
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@PostMapping
(
value
=
"/diagnoCrossList"
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
DiagnoCrossVO
.
class
),
})
public
JsonViewObject
diagnoCrossList
(
@RequestBody
@Valid
DiagnoCrossListDTO
diagnoCrossListDTO
)
{
List
<
DiagnoCrossVO
>
diagnoCrossVOList
=
diagnoService
.
diagnoCrossList
(
diagnoCrossListDTO
);
return
JsonViewObject
.
newInstance
().
success
(
diagnoCrossVOList
);
}
@ApiOperation
(
value
=
"查询路口当前场景"
,
notes
=
"查询路口当前场景"
,
response
=
JsonViewObject
.
class
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@PostMapping
(
value
=
"/queryCrossScene"
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
AddOrUpdateSceneDTO
.
class
),
})
public
JsonViewObject
queryCrossScene
(
@RequestBody
CrossIdDTO
crossIdDTO
)
{
AddOrUpdateSceneDTO
addOrUpdateSceneDTO
=
diagnoService
.
queryCrossScene
(
crossIdDTO
);
return
JsonViewObject
.
newInstance
().
success
(
addOrUpdateSceneDTO
);
}
@ApiOperation
(
value
=
"查询当前路口相邻路口"
,
notes
=
"查询当前路口相邻路口"
,
response
=
JsonViewObject
.
class
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@PostMapping
(
value
=
"/queryNeighborCross"
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
CrossIdAndLocationVO
.
class
),
})
public
JsonViewObject
queryNeighborCross
(
@RequestBody
CrossIdDTO
crossIdDTO
)
{
List
<
CrossIdAndLocationVO
>
crossIdAndLocationVOList
=
diagnoService
.
queryNeighborCross
(
crossIdDTO
);
return
JsonViewObject
.
newInstance
().
success
(
crossIdAndLocationVOList
);
}
}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/controller/strategy/IdeaController.java
View file @
f81f05e0
...
@@ -47,7 +47,7 @@ public class IdeaController {
...
@@ -47,7 +47,7 @@ public class IdeaController {
try
{
try
{
ideaService
.
addOrUpdateIdea
(
addOrUpdateIdeaDTO
);
ideaService
.
addOrUpdateIdea
(
addOrUpdateIdeaDTO
);
}
catch
(
DuplicateKeyException
e
)
{
}
catch
(
DuplicateKeyException
e
)
{
throw
new
Runtime
Exception
(
"方法编号或方法名称不可重复"
);
throw
new
DuplicateKey
Exception
(
"方法编号或方法名称不可重复"
);
}
}
return
JsonViewObject
.
newInstance
().
success
();
return
JsonViewObject
.
newInstance
().
success
();
}
}
...
...
signal-optimize-service/src/main/java/net/wanji/opt/controller/strategy/SceneController.java
View file @
f81f05e0
...
@@ -46,9 +46,9 @@ public class SceneController {
...
@@ -46,9 +46,9 @@ public class SceneController {
try
{
try
{
sceneService
.
addOrUpdateScene
(
addOrUpdateSceneDTO
);
sceneService
.
addOrUpdateScene
(
addOrUpdateSceneDTO
);
}
catch
(
DuplicateKeyException
e
)
{
}
catch
(
DuplicateKeyException
e
)
{
throw
new
Runtime
Exception
(
"场景编号或场景名称不可重复"
);
throw
new
DuplicateKey
Exception
(
"场景编号或场景名称不可重复"
);
}
catch
(
UniqueException
e
)
{
}
catch
(
UniqueException
e
)
{
throw
new
Runtim
eException
(
"应用策略或优化方法不可重复"
);
throw
new
Uniqu
eException
(
"应用策略或优化方法不可重复"
);
}
}
return
JsonViewObject
.
newInstance
().
success
();
return
JsonViewObject
.
newInstance
().
success
();
}
}
...
...
signal-optimize-service/src/main/java/net/wanji/opt/controller/strategy/StrategyController.java
View file @
f81f05e0
...
@@ -47,7 +47,7 @@ public class StrategyController {
...
@@ -47,7 +47,7 @@ public class StrategyController {
try
{
try
{
strategyService
.
addOrUpdateStrategy
(
addOrUpdateStrategyDTO
);
strategyService
.
addOrUpdateStrategy
(
addOrUpdateStrategyDTO
);
}
catch
(
DuplicateKeyException
e
)
{
}
catch
(
DuplicateKeyException
e
)
{
throw
new
Runtime
Exception
(
"策略编号或策略名称不可重复"
);
throw
new
DuplicateKey
Exception
(
"策略编号或策略名称不可重复"
);
}
}
return
JsonViewObject
.
newInstance
().
success
();
return
JsonViewObject
.
newInstance
().
success
();
}
}
...
...
signal-optimize-service/src/main/java/net/wanji/opt/dao/mapper/CrossInfoMapper.java
View file @
f81f05e0
...
@@ -24,4 +24,8 @@ public interface CrossInfoMapper {
...
@@ -24,4 +24,8 @@ public interface CrossInfoMapper {
List
<
CrossInfoPO
>
selectByCrossIds
(
List
<
String
>
crossIdList
);
List
<
CrossInfoPO
>
selectByCrossIds
(
List
<
String
>
crossIdList
);
CrossInfoPO
selectById
(
String
crossId
);
CrossInfoPO
selectById
(
String
crossId
);
List
<
CrossInfoPO
>
selectByName
(
String
name
);
List
<
CrossInfoPO
>
selectAll
();
}
}
signal-optimize-service/src/main/java/net/wanji/opt/dao/mapper/strategy/SceneMapper.java
View file @
f81f05e0
...
@@ -19,4 +19,6 @@ public interface SceneMapper {
...
@@ -19,4 +19,6 @@ public interface SceneMapper {
void
updateOne
(
ScenePO
scenePO
);
void
updateOne
(
ScenePO
scenePO
);
List
<
ScenePO
>
selectByNameAndTarget
(
String
sceneName
,
Integer
sceneTarget
);
List
<
ScenePO
>
selectByNameAndTarget
(
String
sceneName
,
Integer
sceneTarget
);
ScenePO
selectBySceneNum
(
Integer
status
);
}
}
signal-optimize-service/src/main/java/net/wanji/opt/dao/mapper/trend/CrossDataRealtimeMapper.java
View file @
f81f05e0
...
@@ -16,5 +16,5 @@ import java.util.List;
...
@@ -16,5 +16,5 @@ import java.util.List;
public
interface
CrossDataRealtimeMapper
{
public
interface
CrossDataRealtimeMapper
{
List
<
AbnormalCrossListVO
>
selectAbnormalCross
(
Integer
status
,
String
name
,
Integer
type
);
List
<
AbnormalCrossListVO
>
selectAbnormalCross
(
Integer
status
,
String
name
,
Integer
type
);
CrossDataRealtimePO
selectById
(
String
crossId
);
CrossDataRealtimePO
selectBy
Cross
Id
(
String
crossId
);
}
}
signal-optimize-service/src/main/java/net/wanji/opt/dto/DiagnoCrossListDTO.java
0 → 100644
View file @
f81f05e0
package
net
.
wanji
.
opt
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.Pattern
;
/**
* @author Kent HAN
* @date 2023/3/2 10:02
*/
@Data
public
class
DiagnoCrossListDTO
{
@ApiModelProperty
(
name
=
"名称"
,
notes
=
""
)
@Pattern
(
regexp
=
"^[\\u4E00-\\u9FA5\\w\\-]{0,20}$"
,
message
=
"路口名称只能包含中文、英文、数字、下划线和中横线,0~20个字符"
)
private
String
name
;
@ApiModelProperty
(
name
=
"应用对象 1路口;2干线;3区域"
,
notes
=
""
)
private
Integer
target
;
}
signal-optimize-service/src/main/java/net/wanji/opt/dto/strategy/AddOrUpdateSceneDTO.java
View file @
f81f05e0
...
@@ -21,6 +21,8 @@ public class AddOrUpdateSceneDTO {
...
@@ -21,6 +21,8 @@ public class AddOrUpdateSceneDTO {
@ApiModelProperty
(
value
=
"编号"
,
required
=
true
,
notes
=
""
)
@ApiModelProperty
(
value
=
"编号"
,
required
=
true
,
notes
=
""
)
@Pattern
(
regexp
=
"^[\\u4E00-\\u9FA5\\w\\-]{0,16}$"
,
message
=
"编号只能包含中文、英文、数字、下划线和中横线,0~16个字符"
)
@Pattern
(
regexp
=
"^[\\u4E00-\\u9FA5\\w\\-]{0,16}$"
,
message
=
"编号只能包含中文、英文、数字、下划线和中横线,0~16个字符"
)
private
String
sceneCode
;
private
String
sceneCode
;
@ApiModelProperty
(
value
=
"场景代码 0正常 1失衡 2拥堵 3溢出"
,
required
=
false
,
notes
=
""
)
private
Integer
sceneNum
;
@ApiModelProperty
(
value
=
"场景名称"
,
required
=
true
,
notes
=
""
)
@ApiModelProperty
(
value
=
"场景名称"
,
required
=
true
,
notes
=
""
)
@Pattern
(
regexp
=
"^[\\u4E00-\\u9FA5\\w\\-]{0,50}$"
,
message
=
"场景名称只能包含中文、英文、数字、下划线和中横线,0~50个字符"
)
@Pattern
(
regexp
=
"^[\\u4E00-\\u9FA5\\w\\-]{0,50}$"
,
message
=
"场景名称只能包含中文、英文、数字、下划线和中横线,0~50个字符"
)
private
String
sceneName
;
private
String
sceneName
;
...
...
signal-optimize-service/src/main/java/net/wanji/opt/po/strategy/ScenePO.java
View file @
f81f05e0
...
@@ -15,6 +15,8 @@ public class ScenePO {
...
@@ -15,6 +15,8 @@ public class ScenePO {
private
Integer
id
;
private
Integer
id
;
@ApiModelProperty
(
value
=
"编号"
,
notes
=
""
)
@ApiModelProperty
(
value
=
"编号"
,
notes
=
""
)
private
String
sceneCode
;
private
String
sceneCode
;
@ApiModelProperty
(
value
=
"场景代码 0正常 1失衡 2拥堵 3溢出"
,
notes
=
""
)
private
Integer
sceneNum
;
@ApiModelProperty
(
value
=
"场景名称"
,
notes
=
""
)
@ApiModelProperty
(
value
=
"场景名称"
,
notes
=
""
)
private
String
sceneName
;
private
String
sceneName
;
/** 应用对象 1路口;2干线;3区域 */
/** 应用对象 1路口;2干线;3区域 */
...
...
signal-optimize-service/src/main/java/net/wanji/opt/service/DiagnoService.java
0 → 100644
View file @
f81f05e0
package
net
.
wanji
.
opt
.
service
;
import
net.wanji.common.dto.CrossIdDTO
;
import
net.wanji.opt.dto.DiagnoCrossListDTO
;
import
net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO
;
import
net.wanji.opt.vo.CrossIdAndLocationVO
;
import
net.wanji.opt.vo.DiagnoCrossVO
;
import
java.util.List
;
/**
* @author Kent HAN
* @date 2023/3/2 10:09
*/
public
interface
DiagnoService
{
List
<
DiagnoCrossVO
>
diagnoCrossList
(
DiagnoCrossListDTO
diagnoCrossListDTO
);
AddOrUpdateSceneDTO
queryCrossScene
(
CrossIdDTO
crossIdDTO
);
List
<
CrossIdAndLocationVO
>
queryNeighborCross
(
CrossIdDTO
crossIdDTO
);
}
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/DiagnoServiceImpl.java
0 → 100644
View file @
f81f05e0
package
net
.
wanji
.
opt
.
service
.
impl
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.github.pagehelper.PageInfo
;
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.opt.dao.mapper.CrossDirInfoMapper
;
import
net.wanji.opt.dao.mapper.CrossInfoMapper
;
import
net.wanji.opt.dao.mapper.strategy.SceneMapper
;
import
net.wanji.opt.dao.mapper.strategy.SceneStrategyMapper
;
import
net.wanji.opt.dao.mapper.trend.CrossDataRealtimeMapper
;
import
net.wanji.opt.dto.DiagnoCrossListDTO
;
import
net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO
;
import
net.wanji.opt.dto.strategy.QuerySceneDTO
;
import
net.wanji.opt.po.base.CrossInfoPO
;
import
net.wanji.opt.po.strategy.ScenePO
;
import
net.wanji.opt.po.trend.CrossDataRealtimePO
;
import
net.wanji.opt.service.DiagnoService
;
import
net.wanji.opt.service.strategy.SceneService
;
import
net.wanji.opt.vo.CrossIdAndLocationVO
;
import
net.wanji.opt.vo.DiagnoCrossVO
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Objects
;
/**
* @author Kent HAN
* @date 2023/3/2 10:09
*/
@Service
@Slf4j
public
class
DiagnoServiceImpl
implements
DiagnoService
{
private
final
CrossInfoMapper
crossInfoMapper
;
private
final
CrossDataRealtimeMapper
crossDataRealtimeMapper
;
private
final
SceneService
sceneService
;
private
final
SceneMapper
sceneMapper
;
private
final
CrossDirInfoMapper
crossDirInfoMapper
;
private
final
RidInfoMapper
ridInfoMapper
;
public
DiagnoServiceImpl
(
CrossInfoMapper
crossInfoMapper
,
CrossDataRealtimeMapper
crossDataRealtimeMapper
,
SceneService
sceneService
,
SceneStrategyMapper
sceneStrategyMapper
,
SceneMapper
sceneMapper
,
CrossDirInfoMapper
crossDirInfoMapper
,
RidInfoMapper
ridInfoMapper
)
{
this
.
crossInfoMapper
=
crossInfoMapper
;
this
.
crossDataRealtimeMapper
=
crossDataRealtimeMapper
;
this
.
sceneService
=
sceneService
;
this
.
sceneMapper
=
sceneMapper
;
this
.
crossDirInfoMapper
=
crossDirInfoMapper
;
this
.
ridInfoMapper
=
ridInfoMapper
;
}
@Override
public
List
<
DiagnoCrossVO
>
diagnoCrossList
(
DiagnoCrossListDTO
diagnoCrossListDTO
)
{
String
name
=
diagnoCrossListDTO
.
getName
();
Integer
target
=
diagnoCrossListDTO
.
getTarget
();
if
(
target
==
1
)
{
// 路口
return
queryCross
(
name
);
}
return
null
;
}
@Override
public
AddOrUpdateSceneDTO
queryCrossScene
(
CrossIdDTO
crossIdDTO
)
{
// 查询路口场景代码
String
crossId
=
crossIdDTO
.
getCrossId
();
CrossDataRealtimePO
crossDataRealtimePO
=
crossDataRealtimeMapper
.
selectByCrossId
(
crossId
);
Integer
status
=
crossDataRealtimePO
.
getStatus
();
// 获取场景名称
ScenePO
scenePO
=
sceneMapper
.
selectBySceneNum
(
status
);
String
sceneName
=
scenePO
.
getSceneName
();
// 构造请求体
QuerySceneDTO
querySceneDTO
=
new
QuerySceneDTO
();
querySceneDTO
.
setSceneName
(
sceneName
);
querySceneDTO
.
setSceneTarget
(
1
);
querySceneDTO
.
setPageNum
(
1
);
querySceneDTO
.
setPageSize
(
999
);
PageInfo
<
AddOrUpdateSceneDTO
>
pageInfo
=
sceneService
.
queryScene
(
querySceneDTO
);
List
<
AddOrUpdateSceneDTO
>
list
=
pageInfo
.
getList
();
AddOrUpdateSceneDTO
addOrUpdateSceneDTO
=
list
.
get
(
0
);
return
addOrUpdateSceneDTO
;
}
@Override
public
List
<
CrossIdAndLocationVO
>
queryNeighborCross
(
CrossIdDTO
crossIdDTO
)
{
List
<
CrossIdAndLocationVO
>
crossIdAndLocationVOList
=
new
ArrayList
<>();
String
crossId
=
crossIdDTO
.
getCrossId
();
List
<
Integer
>
inDirs
=
crossDirInfoMapper
.
selectInDirsByCrossId
(
crossId
);
for
(
Integer
inDir
:
inDirs
)
{
CrossIdAndLocationVO
crossIdAndLocationVO
=
new
CrossIdAndLocationVO
();
RidInfoEntity
ridInfo
=
ridInfoMapper
.
selectByEndInDir
(
crossId
,
inDir
);
if
(
ridInfo
!=
null
)
{
// 关联路口坐标
String
startCrossId
=
ridInfo
.
getStartCrossId
();
crossIdAndLocationVO
.
setCrossId
(
startCrossId
);
CrossInfoPO
crossInfoPO
=
crossInfoMapper
.
selectById
(
startCrossId
);
if
(
crossInfoPO
!=
null
)
{
String
startLocationStr
=
crossInfoPO
.
getLocation
();
double
[]
startLonLat
=
CrossUtil
.
getLonLat
(
startLocationStr
);
List
<
Double
>
startLocation
=
new
ArrayList
<>();
startLocation
.
add
(
startLonLat
[
0
]);
startLocation
.
add
(
startLonLat
[
1
]);
crossIdAndLocationVO
.
setLocation
(
startLocation
);
}
}
crossIdAndLocationVOList
.
add
(
crossIdAndLocationVO
);
}
return
crossIdAndLocationVOList
;
}
private
List
<
DiagnoCrossVO
>
queryCross
(
String
name
)
{
List
<
DiagnoCrossVO
>
diagnoCrossVOList
=
new
ArrayList
<>();
if
(
ObjectUtil
.
isNotEmpty
(
name
))
{
// 根据name做模糊查询
List
<
CrossInfoPO
>
crossInfoPOList
=
crossInfoMapper
.
selectByName
(
name
);
diagnoCrossVOList
=
getDiagnoCrossVOList
(
crossInfoPOList
);
}
else
{
// 返回全量数据
List
<
CrossInfoPO
>
crossInfoPOList
=
crossInfoMapper
.
selectAll
();
diagnoCrossVOList
=
getDiagnoCrossVOList
(
crossInfoPOList
);
}
return
diagnoCrossVOList
;
}
private
List
<
DiagnoCrossVO
>
getDiagnoCrossVOList
(
List
<
CrossInfoPO
>
crossInfoPOList
)
{
List
<
DiagnoCrossVO
>
diagnoCrossVOList
=
new
ArrayList
<>();
for
(
CrossInfoPO
crossInfoPO
:
crossInfoPOList
)
{
DiagnoCrossVO
diagnoCrossVO
=
new
DiagnoCrossVO
();
diagnoCrossVO
.
setCrossName
(
crossInfoPO
.
getName
());
String
crossId
=
crossInfoPO
.
getId
();
diagnoCrossVO
.
setCrossId
(
crossId
);
CrossDataRealtimePO
crossDataRealtimePO
=
crossDataRealtimeMapper
.
selectByCrossId
(
crossId
);
Integer
status
=
crossDataRealtimePO
.
getStatus
();
diagnoCrossVO
.
setScene
(
status
);
// 选择优先级最高的策略
QuerySceneDTO
querySceneDTO
=
new
QuerySceneDTO
();
querySceneDTO
.
setSceneTarget
(
1
);
querySceneDTO
.
setPageNum
(
1
);
querySceneDTO
.
setPageSize
(
999
);
PageInfo
<
AddOrUpdateSceneDTO
>
sceneList
=
sceneService
.
queryScene
(
querySceneDTO
);
List
<
AddOrUpdateSceneDTO
>
list
=
sceneList
.
getList
();
for
(
AddOrUpdateSceneDTO
addOrUpdateSceneDTO
:
list
)
{
Integer
sceneNum
=
addOrUpdateSceneDTO
.
getSceneNum
();
if
(
Objects
.
equals
(
sceneNum
,
status
))
{
List
<
AddOrUpdateSceneDTO
.
StrategyListElement
>
strategyList
=
addOrUpdateSceneDTO
.
getStrategyList
();
AddOrUpdateSceneDTO
.
StrategyListElement
strategyListElement
=
strategyList
.
get
(
0
);
diagnoCrossVO
.
setStrategy
(
strategyListElement
.
getStrategyName
());
// 选择优先级最高的方法
List
<
AddOrUpdateSceneDTO
.
IdeaListElement
>
ideaList
=
strategyListElement
.
getIdeaList
();
AddOrUpdateSceneDTO
.
IdeaListElement
ideaListElement
=
ideaList
.
get
(
0
);
diagnoCrossVO
.
setIdea
(
ideaListElement
.
getIdeaName
());
}
}
diagnoCrossVOList
.
add
(
diagnoCrossVO
);
}
return
diagnoCrossVOList
;
}
}
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/TrendServiceImpl.java
View file @
f81f05e0
...
@@ -196,11 +196,12 @@ public class TrendServiceImpl implements TrendService {
...
@@ -196,11 +196,12 @@ public class TrendServiceImpl implements TrendService {
AbnormalCrossDetailVO
abnormalCrossDetailVO
=
new
AbnormalCrossDetailVO
();
AbnormalCrossDetailVO
abnormalCrossDetailVO
=
new
AbnormalCrossDetailVO
();
// 构造路口实时数据
// 构造路口实时数据
CrossDataRealtimePO
crossDataRealtimePO
=
crossDataRealtimeMapper
.
selectById
(
crossId
);
CrossDataRealtimePO
crossDataRealtimePO
=
crossDataRealtimeMapper
.
selectBy
Cross
Id
(
crossId
);
abnormalCrossDetailVO
.
setCrossStatus
(
crossDataRealtimePO
.
getStatus
());
abnormalCrossDetailVO
.
setCrossStatus
(
crossDataRealtimePO
.
getStatus
());
abnormalCrossDetailVO
.
setCrossQueueLength
(
crossDataRealtimePO
.
getQueueLength
());
abnormalCrossDetailVO
.
setCrossQueueLength
(
crossDataRealtimePO
.
getQueueLength
());
abnormalCrossDetailVO
.
setCrossFlowRate
(
crossDataRealtimePO
.
getFlowRate
());
abnormalCrossDetailVO
.
setCrossFlowRate
(
crossDataRealtimePO
.
getFlowRate
());
abnormalCrossDetailVO
.
setCrossStopTimes
(
crossDataRealtimePO
.
getStopTimes
());
abnormalCrossDetailVO
.
setCrossStopTimes
(
crossDataRealtimePO
.
getStopTimes
());
abnormalCrossDetailVO
.
setCongestionIndex
(
crossDataRealtimePO
.
getCongestionIndex
());
// 构造转向实时数据
// 构造转向实时数据
List
<
AbnormalCrossDetailVO
.
TurnDataElement
>
turnData
=
buildTurnData
(
crossId
);
List
<
AbnormalCrossDetailVO
.
TurnDataElement
>
turnData
=
buildTurnData
(
crossId
);
abnormalCrossDetailVO
.
setTurnData
(
turnData
);
abnormalCrossDetailVO
.
setTurnData
(
turnData
);
...
...
signal-optimize-service/src/main/java/net/wanji/opt/service/strategy/impl/SceneServiceImpl.java
View file @
f81f05e0
...
@@ -130,6 +130,15 @@ public class SceneServiceImpl implements SceneService {
...
@@ -130,6 +130,15 @@ public class SceneServiceImpl implements SceneService {
scenePO
.
setSceneCode
(
sceneCode
);
scenePO
.
setSceneCode
(
sceneCode
);
String
sceneName
=
addOrUpdateSceneDTO
.
getSceneName
();
String
sceneName
=
addOrUpdateSceneDTO
.
getSceneName
();
scenePO
.
setSceneName
(
sceneName
);
scenePO
.
setSceneName
(
sceneName
);
if
(
sceneName
.
startsWith
(
"失衡"
))
{
scenePO
.
setSceneNum
(
1
);
}
else
if
(
sceneName
.
startsWith
(
"拥堵"
))
{
scenePO
.
setSceneNum
(
2
);
}
else
if
(
sceneName
.
startsWith
(
"溢出"
))
{
scenePO
.
setSceneNum
(
3
);
}
else
{
scenePO
.
setSceneNum
(
0
);
}
Integer
secneTarget
=
addOrUpdateSceneDTO
.
getSecneTarget
();
Integer
secneTarget
=
addOrUpdateSceneDTO
.
getSecneTarget
();
scenePO
.
setSceneTarget
(
secneTarget
);
scenePO
.
setSceneTarget
(
secneTarget
);
}
}
...
@@ -159,6 +168,8 @@ public class SceneServiceImpl implements SceneService {
...
@@ -159,6 +168,8 @@ public class SceneServiceImpl implements SceneService {
addOrUpdateSceneDTO
.
setId
(
id
);
addOrUpdateSceneDTO
.
setId
(
id
);
String
sceneCode
=
scenePO
.
getSceneCode
();
String
sceneCode
=
scenePO
.
getSceneCode
();
addOrUpdateSceneDTO
.
setSceneCode
(
sceneCode
);
addOrUpdateSceneDTO
.
setSceneCode
(
sceneCode
);
Integer
sceneNum
=
scenePO
.
getSceneNum
();
addOrUpdateSceneDTO
.
setSceneNum
(
sceneNum
);
String
sceneNameFromDb
=
scenePO
.
getSceneName
();
String
sceneNameFromDb
=
scenePO
.
getSceneName
();
addOrUpdateSceneDTO
.
setSceneName
(
sceneNameFromDb
);
addOrUpdateSceneDTO
.
setSceneName
(
sceneNameFromDb
);
Integer
sceneTargetFromDb
=
scenePO
.
getSceneTarget
();
Integer
sceneTargetFromDb
=
scenePO
.
getSceneTarget
();
...
...
signal-optimize-service/src/main/java/net/wanji/opt/task/CrossMonitorTask.java
View file @
f81f05e0
...
@@ -102,8 +102,8 @@ public class CrossMonitorTask {
...
@@ -102,8 +102,8 @@ public class CrossMonitorTask {
// todo test数据
// todo test数据
List
<
CrossDataRealtimePO
>
crossDataRealtimePOList
=
new
ArrayList
<>(
1
);
List
<
CrossDataRealtimePO
>
crossDataRealtimePOList
=
new
ArrayList
<>(
1
);
CrossDataRealtimePO
crossDataRealtimePO
=
crossDataRealtimeMapper
.
selectById
(
"14Q1409IRF0"
);
CrossDataRealtimePO
crossDataRealtimePO
=
crossDataRealtimeMapper
.
selectBy
Cross
Id
(
"14Q1409IRF0"
);
CrossDataRealtimePO
crossDataRealtimePO1
=
crossDataRealtimeMapper
.
selectById
(
"14Q0S09IQB0"
);
CrossDataRealtimePO
crossDataRealtimePO1
=
crossDataRealtimeMapper
.
selectBy
Cross
Id
(
"14Q0S09IQB0"
);
crossDataRealtimePOList
.
add
(
crossDataRealtimePO
);
crossDataRealtimePOList
.
add
(
crossDataRealtimePO
);
crossDataRealtimePOList
.
add
(
crossDataRealtimePO1
);
crossDataRealtimePOList
.
add
(
crossDataRealtimePO1
);
...
...
signal-optimize-service/src/main/java/net/wanji/opt/vo/AbnormalCrossDetailVO.java
View file @
f81f05e0
...
@@ -25,6 +25,8 @@ public class AbnormalCrossDetailVO {
...
@@ -25,6 +25,8 @@ public class AbnormalCrossDetailVO {
private
Double
crossFlowRate
;
private
Double
crossFlowRate
;
@ApiModelProperty
(
value
=
"平均停车次数"
)
@ApiModelProperty
(
value
=
"平均停车次数"
)
private
Double
crossStopTimes
;
private
Double
crossStopTimes
;
@ApiModelProperty
(
value
=
"拥堵指数"
)
private
Double
congestionIndex
;
@ApiModelProperty
(
value
=
"转向实时数据"
)
@ApiModelProperty
(
value
=
"转向实时数据"
)
private
List
<
TurnDataElement
>
turnData
;
private
List
<
TurnDataElement
>
turnData
;
@ApiModelProperty
(
value
=
"方向实时数据"
)
@ApiModelProperty
(
value
=
"方向实时数据"
)
...
...
signal-optimize-service/src/main/java/net/wanji/opt/vo/CrossIdAndLocationVO.java
0 → 100644
View file @
f81f05e0
package
net
.
wanji
.
opt
.
vo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.List
;
/**
* @author Kent HAN
* @date 2023/3/2 11:33
*/
@Data
@NoArgsConstructor
@ApiModel
(
value
=
"CrossIdAndLocationVO"
)
public
class
CrossIdAndLocationVO
{
@ApiModelProperty
(
value
=
"路口ID"
)
String
crossId
;
@ApiModelProperty
(
value
=
"路口坐标"
)
List
<
Double
>
location
;
}
signal-optimize-service/src/main/java/net/wanji/opt/vo/DiagnoCrossVO.java
0 → 100644
View file @
f81f05e0
package
net
.
wanji
.
opt
.
vo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @author Kent HAN
* @date 2023/2/9 8:38
*/
@Data
@NoArgsConstructor
@ApiModel
(
value
=
"DiagnoCrossVO"
,
description
=
"诊断优化路口列表元素"
)
public
class
DiagnoCrossVO
{
@ApiModelProperty
(
name
=
"路口ID"
,
notes
=
""
)
private
String
crossId
;
@ApiModelProperty
(
value
=
"路口名称"
)
String
crossName
;
@ApiModelProperty
(
value
=
"当前场景 0正常 1失衡 2拥堵 3溢出"
)
Integer
scene
;
@ApiModelProperty
(
value
=
"优化策略"
)
String
strategy
;
@ApiModelProperty
(
value
=
"优化方法"
)
String
idea
;
}
signal-optimize-service/src/main/resources/mapper/CrossInfoMapper.xml
View file @
f81f05e0
...
@@ -58,4 +58,23 @@
...
@@ -58,4 +58,23 @@
where id = #{crossId}
where id = #{crossId}
</select>
</select>
<select
id=
"selectByName"
resultType=
"net.wanji.opt.po.base.CrossInfoPO"
>
select
id,name,type,level,area_code,is_signal,is_start,is_send,location
from t_base_cross_info
<where>
<if
test=
"name != null and name != ''"
>
AND name LIKE CONCAT('%',#{name},'%')
</if>
</where>
order by id
</select>
<select
id=
"selectAll"
resultType=
"net.wanji.opt.po.base.CrossInfoPO"
>
select
id,name,type,level,area_code,is_signal,is_start,is_send,location
from t_base_cross_info
order by id
</select>
</mapper>
</mapper>
signal-optimize-service/src/main/resources/mapper/strategy/IdeaMapper.xml
View file @
f81f05e0
...
@@ -50,6 +50,7 @@
...
@@ -50,6 +50,7 @@
AND idea_target = #{ideaTarget}
AND idea_target = #{ideaTarget}
</if>
</if>
</where>
</where>
order by id
</select>
</select>
<select
id=
"selectById"
resultType=
"net.wanji.opt.po.strategy.IdeaPO"
>
<select
id=
"selectById"
resultType=
"net.wanji.opt.po.strategy.IdeaPO"
>
...
...
signal-optimize-service/src/main/resources/mapper/strategy/SceneMapper.xml
View file @
f81f05e0
...
@@ -3,8 +3,8 @@
...
@@ -3,8 +3,8 @@
<mapper
namespace=
"net.wanji.opt.dao.mapper.strategy.SceneMapper"
>
<mapper
namespace=
"net.wanji.opt.dao.mapper.strategy.SceneMapper"
>
<insert
id=
"insertOne"
keyProperty=
"id"
useGeneratedKeys=
"true"
>
<insert
id=
"insertOne"
keyProperty=
"id"
useGeneratedKeys=
"true"
>
insert into t_strategy_scene(scene_code,scene_name,scene_target)
insert into t_strategy_scene(scene_code,scene_n
um,scene_n
ame,scene_target)
values (#{sceneCode},#{sceneName},#{sceneTarget})
values (#{sceneCode},#{sceneN
um},#{sceneN
ame},#{sceneTarget})
</insert>
</insert>
<update
id=
"updateOne"
>
<update
id=
"updateOne"
>
...
@@ -13,10 +13,13 @@
...
@@ -13,10 +13,13 @@
<if
test=
"sceneCode != null and sceneCode != ''"
>
<if
test=
"sceneCode != null and sceneCode != ''"
>
scene_code = #{sceneCode},
scene_code = #{sceneCode},
</if>
</if>
<if
test=
"sceneNum != null"
>
scene_num = #{sceneNum},
</if>
<if
test=
"sceneName != null and sceneName != ''"
>
<if
test=
"sceneName != null and sceneName != ''"
>
scene_name = #{sceneName},
scene_name = #{sceneName},
</if>
</if>
<if
test=
"sceneTarget != null
and sceneTarget != ''
"
>
<if
test=
"sceneTarget != null"
>
scene_target = #{sceneTarget},
scene_target = #{sceneTarget},
</if>
</if>
</set>
</set>
...
@@ -33,7 +36,7 @@
...
@@ -33,7 +36,7 @@
<select
id=
"selectByNameAndTarget"
resultType=
"net.wanji.opt.po.strategy.ScenePO"
>
<select
id=
"selectByNameAndTarget"
resultType=
"net.wanji.opt.po.strategy.ScenePO"
>
select
select
id,scene_code,scene_name,scene_target,gmt_create,gmt_modified
id,scene_code,scene_n
um,scene_n
ame,scene_target,gmt_create,gmt_modified
from t_strategy_scene
from t_strategy_scene
<where>
<where>
<if
test=
"sceneName != null and sceneName != ''"
>
<if
test=
"sceneName != null and sceneName != ''"
>
...
@@ -43,6 +46,14 @@
...
@@ -43,6 +46,14 @@
AND scene_target = #{sceneTarget}
AND scene_target = #{sceneTarget}
</if>
</if>
</where>
</where>
order by id
</select>
<select
id=
"selectBySceneNum"
resultType=
"net.wanji.opt.po.strategy.ScenePO"
>
select
id,scene_code,scene_num,scene_name,scene_target,gmt_create,gmt_modified
from t_strategy_scene
where scene_num = ${status}
</select>
</select>
</mapper>
</mapper>
signal-optimize-service/src/main/resources/mapper/strategy/StrategyMapper.xml
View file @
f81f05e0
...
@@ -52,6 +52,7 @@
...
@@ -52,6 +52,7 @@
AND strategyTarget = #{strategyTarget}
AND strategyTarget = #{strategyTarget}
</if>
</if>
</where>
</where>
order by id
</select>
</select>
<select
id=
"selectById"
resultType=
"net.wanji.opt.po.strategy.StrategyPO"
>
<select
id=
"selectById"
resultType=
"net.wanji.opt.po.strategy.StrategyPO"
>
...
...
signal-optimize-service/src/main/resources/mapper/trend/CrossDataRealtimeMapper.xml
View file @
f81f05e0
...
@@ -27,7 +27,7 @@
...
@@ -27,7 +27,7 @@
</where>
</where>
</select>
</select>
<select
id=
"selectById"
resultType=
"net.wanji.opt.po.trend.CrossDataRealtimePO"
>
<select
id=
"selectBy
Cross
Id"
resultType=
"net.wanji.opt.po.trend.CrossDataRealtimePO"
>
select
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
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_realtime
from t_cross_data_realtime
...
...
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