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
9ea30edc
Commit
9ea30edc
authored
Mar 03, 2023
by
hanbing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[add] 诊断优化,查询方案优化
parent
d3fcdf4e
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
315 additions
and
138 deletions
+315
-138
OptExceptionHandler.java
...a/net/wanji/opt/common/exception/OptExceptionHandler.java
+3
-41
DiagnoController.java
.../main/java/net/wanji/opt/controller/DiagnoController.java
+15
-16
CrossSchemeMapper.java
...main/java/net/wanji/opt/dao/mapper/CrossSchemeMapper.java
+32
-0
CrossSchemeOptLogMapper.java
...ava/net/wanji/opt/dao/mapper/CrossSchemeOptLogMapper.java
+1
-1
CrossSchemePO.java
...ce/src/main/java/net/wanji/opt/po/base/CrossSchemePO.java
+31
-16
DiagnoService.java
...ce/src/main/java/net/wanji/opt/service/DiagnoService.java
+3
-4
DiagnoServiceImpl.java
...in/java/net/wanji/opt/service/impl/DiagnoServiceImpl.java
+56
-58
SchemeOptVO.java
...e-service/src/main/java/net/wanji/opt/vo/SchemeOptVO.java
+42
-0
CrossSchemeMapper.xml
...e-service/src/main/resources/mapper/CrossSchemeMapper.xml
+122
-1
GlobalExceptionHandler.java
...on/framework/exceptionhandler/GlobalExceptionHandler.java
+10
-1
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/common/exception/OptExceptionHandler.java
View file @
9ea30edc
...
...
@@ -2,18 +2,9 @@ package net.wanji.opt.common.exception;
import
net.wanji.common.framework.exceptionhandler.GlobalExceptionHandler
;
import
net.wanji.common.framework.rest.JsonViewObject
;
import
org.springframework.dao.DuplicateKeyException
;
import
org.springframework.validation.BindingResult
;
import
org.springframework.validation.FieldError
;
import
org.springframework.validation.ObjectError
;
import
org.springframework.web.bind.MethodArgumentNotValidException
;
import
org.springframework.web.bind.annotation.ExceptionHandler
;
import
org.springframework.web.bind.annotation.RestControllerAdvice
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* 全局异常处理
*
...
...
@@ -22,40 +13,11 @@ import java.util.Map;
*/
@RestControllerAdvice
public
class
OptExceptionHandler
extends
GlobalExceptionHandler
{
@ExceptionHandler
(
value
=
MethodArgumentNotValidException
.
class
)
public
JsonViewObject
methodArgumentExceptionHandler
(
MethodArgumentNotValidException
e
)
{
BindingResult
bindingResult
=
e
.
getBindingResult
();
List
<
ObjectError
>
allErrors
=
bindingResult
.
getAllErrors
();
String
message
=
""
;
for
(
ObjectError
error
:
allErrors
)
{
message
=
error
.
getDefaultMessage
();
}
JsonViewObject
jsonViewObject
=
JsonViewObject
.
newInstance
();
return
jsonViewObject
.
fail
(
message
);
}
@ExceptionHandler
(
value
=
DuplicateKeyException
.
class
)
public
JsonViewObject
duplicateKeyExceptionHandler
(
DuplicateKeyException
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
)
{
Map
<
String
,
String
>
map
=
new
HashMap
<>();
List
<
FieldError
>
list
=
result
.
getFieldErrors
();
for
(
FieldError
error
:
list
)
{
map
.
put
(
error
.
getField
(),
error
.
getDefaultMessage
());
}
return
map
;
}
}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/controller/DiagnoController.java
View file @
9ea30edc
...
...
@@ -6,17 +6,15 @@ 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.
DiagnoCross
VO
;
import
net.wanji.opt.vo.
SchemeOpt
VO
;
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
;
...
...
@@ -36,19 +34,8 @@ public class DiagnoController {
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
,
@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
)
...
...
@@ -71,4 +58,16 @@ public class DiagnoController {
List
<
CrossIdAndLocationVO
>
crossIdAndLocationVOList
=
diagnoService
.
queryNeighborCross
(
crossIdDTO
);
return
JsonViewObject
.
newInstance
().
success
(
crossIdAndLocationVOList
);
}
@ApiOperation
(
value
=
"查询方案优化"
,
notes
=
"查询方案优化"
,
response
=
JsonViewObject
.
class
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@PostMapping
(
value
=
"/querySchemeOpt"
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
SchemeOptVO
.
class
),
})
public
JsonViewObject
querySchemeOpt
(
@RequestBody
CrossIdDTO
crossIdDTO
)
{
SchemeOptVO
schemeOptVO
=
diagnoService
.
querySchemeOpt
(
crossIdDTO
);
return
JsonViewObject
.
newInstance
().
success
(
schemeOptVO
);
}
}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/dao/mapper/CrossSchemeMapper.java
View file @
9ea30edc
...
...
@@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Param;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
import
java.util.Set
;
/**
* @author hfx
...
...
@@ -21,4 +22,35 @@ public interface CrossSchemeMapper {
*/
List
<
CrossSchemePO
>
listCrossSchemeInfo
(
@Param
(
"crossId"
)
String
crossId
,
@Param
(
"schemeNo"
)
String
schemeNo
,
@Param
(
"id"
)
Integer
id
);
void
insertBatch
(
@Param
(
"entities"
)
List
<
CrossSchemePO
>
entities
);
Integer
selectIdByCrossIdAndSchemeNo
(
@Param
(
"crossId"
)
String
crossId
,
@Param
(
"schemeNo"
)
String
schemeNo
);
void
updateCoordPhase
(
@Param
(
"crossId"
)
String
crossId
,
@Param
(
"schemeNo"
)
String
schemeNo
,
@Param
(
"phaseId"
)
Integer
phaseId
);
List
<
CrossSchemePO
>
selectByCrossId
(
@Param
(
"crossId"
)
String
crossId
);
Integer
selectIdByCrossIdAndSchemeName
(
@Param
(
"crossId"
)
String
crossId
,
@Param
(
"schemeName"
)
String
schemeName
);
CrossSchemePO
selectByCrossIdAndSchemeName
(
@Param
(
"crossId"
)
String
crossId
,
@Param
(
"schemeName"
)
String
schemeName
);
CrossSchemePO
selectById
(
@Param
(
"id"
)
Integer
id
);
void
insertOne
(
CrossSchemePO
crossSchemePO
);
void
update
(
CrossSchemePO
crossSchemePO
);
Set
<
Integer
>
selectIdsByCrossId
(
String
crossId
);
void
deleteByIds
(
Set
<
Integer
>
existedIds
);
void
resetStatus
(
String
crossId
);
void
updateStatus
(
Integer
schemeId
);
CrossSchemePO
selectByCrossIdAndSchemeNo
(
String
crossId
,
String
schemeNo
);
}
signal-optimize-service/src/main/java/net/wanji/opt/dao/mapper/CrossSchemeOptLogMapper.java
View file @
9ea30edc
...
...
@@ -13,7 +13,7 @@ import java.util.List;
@Repository
public
interface
CrossSchemeOptLogMapper
{
List
<
CrossSchemeOptLogPO
>
selectByCrossId
();
List
<
CrossSchemeOptLogPO
>
selectByCrossId
(
String
crossId
);
int
insertOne
(
CrossSchemeOptLogPO
entity
);
...
...
signal-optimize-service/src/main/java/net/wanji/opt/po/base/CrossSchemePO.java
View file @
9ea30edc
...
...
@@ -3,6 +3,8 @@ package net.wanji.opt.po.base;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.util.Date
;
/**
* @author hfx
* @date 2023/01/12 13:29:39
...
...
@@ -10,26 +12,39 @@ import lombok.Data;
*/
@Data
public
class
CrossSchemePO
{
/** 方案ID */
@ApiModelProperty
(
name
=
"方案ID"
,
notes
=
""
)
private
Integer
id
;
private
Integer
id
;
/** 方案号 */
@ApiModelProperty
(
name
=
"方案号"
,
notes
=
""
)
private
String
schemeNo
;
private
String
schemeNo
;
/** 方案名称 */
@ApiModelProperty
(
name
=
"方案名称"
,
notes
=
""
)
private
String
name
;
private
String
name
;
/** 路口ID */
@ApiModelProperty
(
name
=
"路口ID"
,
notes
=
""
)
private
String
crossId
;
@ApiModelProperty
(
name
=
"周期
(秒)
"
,
notes
=
""
)
private
Integer
cycle
;
private
String
crossId
;
/** 周期 */
@ApiModelProperty
(
name
=
"周期"
,
notes
=
""
)
private
Integer
cycle
=
0
;
/** 协调相位ID */
@ApiModelProperty
(
name
=
"协调相位ID"
,
notes
=
""
)
private
Integer
coordPhase
;
private
Integer
coordPhase
=
0
;
/** 相位差 */
@ApiModelProperty
(
name
=
"相位差"
,
notes
=
""
)
private
Integer
offset
;
private
Integer
offset
=
0
;
/** 数据来源:1信号机;2平台 */
@ApiModelProperty
(
name
=
"数据来源:1信号机;2平台"
,
notes
=
""
)
private
Integer
source
;
/** 删除标识:1删除;0未删除 */
@ApiModelProperty
(
name
=
"删除标识:1删除;0未删除"
,
notes
=
""
)
private
Integer
isDeleted
;
@ApiModelProperty
(
name
=
"状态:1执行;0未执行"
,
notes
=
""
)
private
Integer
status
=
0
;
/** 创建时间 */
@ApiModelProperty
(
name
=
"创建时间"
,
notes
=
""
)
private
Date
gmtCreate
;
/** 修改时间 */
@ApiModelProperty
(
name
=
"修改时间"
,
notes
=
""
)
private
Date
gmtModified
;
}
signal-optimize-service/src/main/java/net/wanji/opt/service/DiagnoService.java
View file @
9ea30edc
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.
DiagnoCross
VO
;
import
net.wanji.opt.vo.
SchemeOpt
VO
;
import
java.util.List
;
...
...
@@ -13,9 +12,9 @@ import java.util.List;
* @date 2023/3/2 10:09
*/
public
interface
DiagnoService
{
List
<
DiagnoCrossVO
>
diagnoCrossList
(
DiagnoCrossListDTO
diagnoCrossListDTO
);
AddOrUpdateSceneDTO
queryCrossScene
(
CrossIdDTO
crossIdDTO
);
List
<
CrossIdAndLocationVO
>
queryNeighborCross
(
CrossIdDTO
crossIdDTO
);
SchemeOptVO
querySchemeOpt
(
CrossIdDTO
crossIdDTO
);
}
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/DiagnoServiceImpl.java
View file @
9ea30edc
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
;
...
...
@@ -9,24 +8,29 @@ 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.CrossSchemeMapper
;
import
net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper
;
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.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.service.DiagnoService
;
import
net.wanji.opt.service.strategy.SceneService
;
import
net.wanji.opt.vo.CrossIdAndLocationVO
;
import
net.wanji.opt.vo.DiagnoCrossVO
;
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.List
;
import
java.util.O
bjects
;
import
java.util.O
ptional
;
/**
* @author Kent HAN
...
...
@@ -42,25 +46,19 @@ public class DiagnoServiceImpl implements DiagnoService {
private
final
SceneMapper
sceneMapper
;
private
final
CrossDirInfoMapper
crossDirInfoMapper
;
private
final
RidInfoMapper
ridInfoMapper
;
private
final
CrossSchemeOptLogMapper
crossSchemeOptLogMapper
;
private
final
CrossSchemeMapper
crossSchemeMapper
;
public
DiagnoServiceImpl
(
CrossInfoMapper
crossInfoMapper
,
CrossDataRealtimeMapper
crossDataRealtimeMapper
,
SceneService
sceneService
,
SceneStrategyMapper
sceneStrategyMapper
,
SceneMapper
sceneMapper
,
CrossDirInfoMapper
crossDirInfoMapper
,
RidInfoMapper
ridInfoMapper
)
{
SceneService
sceneService
,
SceneStrategyMapper
sceneStrategyMapper
,
SceneMapper
sceneMapper
,
CrossDirInfoMapper
crossDirInfoMapper
,
RidInfoMapper
ridInfoMapper
,
CrossSchemeOptLogMapper
crossSchemeOptLogMapper
,
CrossSchemeMapper
crossSchemeMapper
)
{
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
;
this
.
crossSchemeOptLogMapper
=
crossSchemeOptLogMapper
;
this
.
crossSchemeMapper
=
crossSchemeMapper
;
}
@Override
...
...
@@ -112,52 +110,52 @@ public class DiagnoServiceImpl implements DiagnoService {
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
;
@Override
public
SchemeOptVO
querySchemeOpt
(
CrossIdDTO
crossIdDTO
)
{
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
);
CrossSchemeOptLogPO
crossSchemeOptLogPO
=
maxList
.
get
(
0
);
String
optType
=
crossSchemeOptLogPO
.
getOptType
();
schemeOptVO
.
setOptType
(
Integer
.
parseInt
(
optType
));
String
schemeNo
=
crossSchemeOptLogPO
.
getSchemeNo
();
CrossSchemePO
crossSchemePO
=
crossSchemeMapper
.
selectByCrossIdAndSchemeNo
(
crossId
,
schemeNo
);
schemeOptVO
.
setCycle
(
crossSchemePO
.
getCycle
());
schemeOptVO
.
setOffset
(
crossSchemeOptLogPO
.
getOffset
());
// 构造调整时间列表
List
<
SchemeOptVO
.
PhaseOptTime
>
phaseOptTimeList
=
buildPhaseOptTimeList
(
maxList
);
schemeOptVO
.
setPhaseOptTimeList
(
phaseOptTimeList
);
return
schemeOptVO
;
}
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
());
}
@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
);
}
diagnoCrossVOList
.
add
(
diagnoCrossVO
);
}
return
diagnoCrossVOList
;
return
maxList
;
}
private
List
<
SchemeOptVO
.
PhaseOptTime
>
buildPhaseOptTimeList
(
List
<
CrossSchemeOptLogPO
>
crossSchemeOptLogPOList
)
{
List
<
SchemeOptVO
.
PhaseOptTime
>
phaseOptTimeList
=
new
ArrayList
<>();
for
(
CrossSchemeOptLogPO
crossSchemeOptLogPO
:
crossSchemeOptLogPOList
)
{
SchemeOptVO
.
PhaseOptTime
phaseOptTime
=
new
SchemeOptVO
.
PhaseOptTime
();
phaseOptTime
.
setPhaseNo
(
crossSchemeOptLogPO
.
getPhaseNo
());
phaseOptTime
.
setOriGreenTime
(
crossSchemeOptLogPO
.
getOriGreenTime
());
phaseOptTime
.
setOptGreenTime
(
crossSchemeOptLogPO
.
getOptGreenTime
());
phaseOptTime
.
setOptTime
(
crossSchemeOptLogPO
.
getOptTime
());
phaseOptTimeList
.
add
(
phaseOptTime
);
}
return
phaseOptTimeList
;
}
}
signal-optimize-service/src/main/java/net/wanji/opt/vo/SchemeOptVO.java
0 → 100644
View file @
9ea30edc
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/2/9 8:38
*/
@Data
@NoArgsConstructor
@ApiModel
(
value
=
"SchemeOptVO"
,
description
=
"查询方案优化返回值"
)
public
class
SchemeOptVO
{
@ApiModelProperty
(
name
=
"路口ID"
,
notes
=
""
)
private
String
crossId
;
@ApiModelProperty
(
value
=
"优化模式 0手动干预 1中心优化 6边缘优化"
)
private
Integer
optType
;
@ApiModelProperty
(
value
=
"周期"
)
private
Integer
cycle
;
@ApiModelProperty
(
value
=
"相位差"
)
private
Integer
offset
;
@ApiModelProperty
(
value
=
"调整时间表格"
)
private
List
<
PhaseOptTime
>
phaseOptTimeList
;
@Data
@NoArgsConstructor
@ApiModel
(
value
=
"PhaseOptTime"
,
description
=
"调整时间表格元素"
)
public
static
class
PhaseOptTime
{
@ApiModelProperty
(
value
=
"相位编号"
)
private
String
phaseNo
;
@ApiModelProperty
(
value
=
"原绿灯时长"
)
private
Integer
oriGreenTime
;
@ApiModelProperty
(
value
=
"调整后绿灯时长"
)
private
Integer
optGreenTime
;
@ApiModelProperty
(
value
=
"调整时间"
)
private
Integer
optTime
;
}
}
signal-optimize-service/src/main/resources/mapper/CrossSchemeMapper.xml
View file @
9ea30edc
<?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.CrossSchemeMapper"
>
<!-- 通用查询映射结果 -->
<resultMap
type=
"net.wanji.opt.po.base.CrossSchemePO"
id=
"BaseResultMap"
>
<result
property=
"id"
column=
"id"
/>
<result
property=
"id"
column=
"id"
/>
<result
property=
"schemeNo"
column=
"scheme_no"
/>
<result
property=
"name"
column=
"name"
/>
<result
property=
"crossId"
column=
"cross_id"
/>
<result
property=
"cycle"
column=
"cycle"
/>
<result
property=
"coordPhase"
column=
"coord_phase"
/>
<result
property=
"offset"
column=
"offset"
/>
<result
property=
"source"
column=
"source"
/>
<result
property=
"isDeleted"
column=
"is_deleted"
/>
<result
property=
"status"
column=
"status"
/>
<result
property=
"gmtCreate"
column=
"gmt_create"
/>
<result
property=
"gmtModified"
column=
"gmt_modified"
/>
</resultMap>
<insert
id=
"insertBatch"
keyProperty=
"id"
useGeneratedKeys=
"true"
>
insert into t_base_cross_scheme(scheme_no,name,cross_id,cycle,coord_phase,offset,source,is_deleted,status)
values
<foreach
collection=
"entities"
item=
"entity"
separator=
","
>
(#{entity.schemeNo},#{entity.name},#{entity.crossId},#{entity.cycle},#{entity.coordPhase},#{entity.offset},#{entity.source},#{entity.isDeleted},#{entity.status})
</foreach>
</insert>
<insert
id=
"insertOne"
>
insert into t_base_cross_scheme(scheme_no,name,cross_id,cycle,coord_phase,offset,source,is_deleted,status)
values (#{schemeNo},#{name},#{crossId},#{cycle},#{coordPhase},#{offset},#{source},#{isDeleted},#{status})
</insert>
<update
id=
"updateCoordPhase"
>
update t_base_cross_scheme
set coord_phase = #{phaseId}
where cross_id = #{crossId} and scheme_no = #{schemeNo}
</update>
<update
id=
"update"
>
update t_base_cross_scheme
<set>
status = 0,
<if
test=
"name != null and name != ''"
>
name = #{name},
</if>
<if
test=
"cycle != null and cycle != ''"
>
cycle = #{cycle},
</if>
<if
test=
"coordPhase != null and coordPhase != ''"
>
coord_phase = #{coordPhase},
</if>
<if
test=
"offset != null and offset != ''"
>
offset = #{offset},
</if>
<if
test=
"source != null and source != ''"
>
source = #{source},
</if>
<if
test=
"isDeleted != null and isDeleted != ''"
>
is_deleted = #{isDeleted},
</if>
<if
test=
"status != null and isDeleted != ''"
>
status = #{status},
</if>
</set>
where id = #{id}
</update>
<update
id=
"resetStatus"
>
UPDATE t_base_cross_scheme
SET status = 0
WHERE cross_id = #{crossId}
</update>
<update
id=
"updateStatus"
>
UPDATE t_base_cross_scheme
SET status = 1
WHERE id = #{schemeId}
</update>
<delete
id=
"deleteByCrossId"
>
delete from t_base_cross_scheme
where cross_id = #{crossId}
</delete>
<select
id=
"selectIdByCrossIdAndSchemeNo"
resultType=
"java.lang.Integer"
>
select id from t_base_cross_scheme
where cross_id = #{crossId} and scheme_no = #{schemeNo}
</select>
<!-- 查询方案基础信息列表 -->
<select
id=
"listCrossSchemeInfo"
parameterType=
"String"
resultMap=
"BaseResultMap"
>
select
...
...
@@ -36,5 +111,51 @@
</if>
</select>
<select
id=
"selectByCrossId"
resultMap=
"BaseResultMap"
>
select
id,scheme_no,name,cross_id,cycle,coord_phase,offset,source,is_deleted,status,gmt_create,gmt_modified
from t_base_cross_scheme
where cross_id = #{crossId}
</select>
<select
id=
"selectIdByCrossIdAndSchemeName"
resultType=
"java.lang.Integer"
>
select id from t_base_cross_scheme
where cross_id = #{crossId} and name = #{schemeName}
</select>
<select
id=
"selectByCrossIdAndSchemeName"
resultMap=
"BaseResultMap"
>
select
id,scheme_no,name,cross_id,cycle,coord_phase,offset,source,is_deleted,status,gmt_create,gmt_modified
from t_base_cross_scheme
where cross_id = #{crossId} and name = #{schemeName}
</select>
<select
id=
"selectById"
resultType=
"net.wanji.opt.po.base.CrossSchemePO"
>
select
id,scheme_no,name,cross_id,cycle,coord_phase,offset,source,is_deleted,status,gmt_create,gmt_modified
from t_base_cross_scheme
where id = #{id}
</select>
<select
id=
"selectIdsByCrossId"
resultType=
"java.lang.Integer"
>
SELECT id FROM t_base_cross_scheme
WHERE cross_id = #{crossId}
</select>
<select
id=
"selectByCrossIdAndSchemeNo"
resultType=
"net.wanji.opt.po.base.CrossSchemePO"
>
select
id,scheme_no,name,cross_id,cycle,coord_phase,offset,source,is_deleted,status,gmt_create,gmt_modified
from t_base_cross_scheme
where cross_id = #{crossId} and scheme_no = #{schemeNo}
</select>
<delete
id=
"deleteByIds"
>
DELETE FROM t_base_cross_scheme
WHERE id IN
<foreach
collection=
"existedIds"
item=
"id"
separator=
","
open=
"("
close=
")"
>
#{id}
</foreach>
</delete>
</mapper>
wj-common/src/main/java/net/wanji/common/framework/exceptionhandler/GlobalExceptionHandler.java
View file @
9ea30edc
...
...
@@ -2,6 +2,7 @@ package net.wanji.common.framework.exceptionhandler;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.framework.rest.JsonViewObject
;
import
org.springframework.dao.DuplicateKeyException
;
import
org.springframework.validation.FieldError
;
import
org.springframework.web.bind.MethodArgumentNotValidException
;
import
org.springframework.web.bind.annotation.ExceptionHandler
;
...
...
@@ -11,9 +12,17 @@ import javax.servlet.http.HttpServletRequest;
import
java.io.IOException
;
@RestControllerAdvice
@Slf4j
@RestControllerAdvice
public
class
GlobalExceptionHandler
{
/**
* 数据库字段值重复异常
*/
@ExceptionHandler
(
value
=
DuplicateKeyException
.
class
)
public
JsonViewObject
duplicateKeyExceptionHandler
(
DuplicateKeyException
e
)
{
return
JsonViewObject
.
newInstance
().
fail
(
e
);
}
/**
* IO异常处理
...
...
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