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
9c0c62b3
Commit
9c0c62b3
authored
Mar 18, 2025
by
duanruiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[add] 干线策略推荐相位差列表
parent
4b5539c8
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
182 additions
and
76 deletions
+182
-76
RestTemplateConfig.java
...rc/main/java/net/wanji/opt/config/RestTemplateConfig.java
+63
-63
TrendControllerV2.java
...in/java/net/wanji/opt/controllerv2/TrendControllerV2.java
+19
-1
TrendServiceV2.java
...src/main/java/net/wanji/opt/servicev2/TrendServiceV2.java
+2
-0
TrendServiceV2Impl.java
...va/net/wanji/opt/servicev2/implv2/TrendServiceV2Impl.java
+67
-12
GreenOptCrossOffsetVO.java
...rc/main/java/net/wanji/opt/vo2/GreenOptCrossOffsetVO.java
+31
-0
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/config/RestTemplateConfig.java
View file @
9c0c62b3
package
net
.
wanji
.
opt
.
config
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.data.redis.connection.RedisConnectionFactory
;
import
org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.serializer.StringRedisSerializer
;
@Configuration
public
class
RestTemplateConfig
{
@Value
(
"${spring.redis.host}"
)
private
String
redisHost
;
@Value
(
"${spring.redis.port}"
)
private
int
redisPort
;
@Value
(
"${spring.redis.database}"
)
private
int
redisDatabase
;
@Value
(
"${spring.redis.password}"
)
private
String
redisPassword
;
// 默认使用配置的数据库
@Bean
public
RedisConnectionFactory
redisConnectionFactory
()
{
LettuceConnectionFactory
factory
=
new
LettuceConnectionFactory
(
redisHost
,
redisPort
);
factory
.
setPassword
(
redisPassword
);
factory
.
setDatabase
(
redisDatabase
);
return
factory
;
}
@Bean
(
name
=
"redisTemplate"
)
public
RedisTemplate
<
String
,
Object
>
redisTemplate
()
{
RedisTemplate
<
String
,
Object
>
template
=
new
RedisTemplate
<>();
template
.
setConnectionFactory
(
redisConnectionFactory
());
template
.
setKeySerializer
(
new
StringRedisSerializer
());
template
.
setValueSerializer
(
new
StringRedisSerializer
());
return
template
;
}
// 使用7号数据库
@Bean
(
name
=
"redis7ConnectionFactory"
)
public
RedisConnectionFactory
redis7ConnectionFactory
()
{
LettuceConnectionFactory
factory
=
new
LettuceConnectionFactory
(
redisHost
,
redisPort
);
factory
.
setPassword
(
redisPassword
);
factory
.
setDatabase
(
7
);
return
factory
;
}
@Bean
(
name
=
"redis7Template"
)
public
RedisTemplate
<
String
,
Object
>
redis7Template
()
{
RedisTemplate
<
String
,
Object
>
template
=
new
RedisTemplate
<>();
template
.
setConnectionFactory
(
redis7ConnectionFactory
());
template
.
setKeySerializer
(
new
StringRedisSerializer
());
template
.
setValueSerializer
(
new
StringRedisSerializer
());
return
template
;
}
}
\ No newline at end of file
//package net.wanji.opt.config;
//
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.data.redis.connection.RedisConnectionFactory;
//import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.data.redis.serializer.StringRedisSerializer;
//
//@Configuration
//public class RestTemplateConfig {
//
// @Value("${spring.redis.host}")
// private String redisHost;
//
// @Value("${spring.redis.port}")
// private int redisPort;
//
// @Value("${spring.redis.database}")
// private int redisDatabase;
//
// @Value("${spring.redis.password}")
// private String redisPassword;
//
//
// // 默认使用配置的数据库
// @Bean
// public RedisConnectionFactory redisConnectionFactory() {
// LettuceConnectionFactory factory = new LettuceConnectionFactory(redisHost, redisPort);
// factory.setPassword(redisPassword);
// factory.setDatabase(redisDatabase);
// return factory;
// }
//
// @Bean(name = "redisTemplate")
// public RedisTemplate<String, Object> redisTemplate() {
// RedisTemplate<String, Object> template = new RedisTemplate<>();
// template.setConnectionFactory(redisConnectionFactory());
// template.setKeySerializer(new StringRedisSerializer());
// template.setValueSerializer(new StringRedisSerializer());
// return template;
// }
//
// // 使用7号数据库
// @Bean(name = "redis7ConnectionFactory")
// public RedisConnectionFactory redis7ConnectionFactory() {
// LettuceConnectionFactory factory = new LettuceConnectionFactory(redisHost, redisPort);
// factory.setPassword(redisPassword);
// factory.setDatabase(7);
// return factory;
// }
//
// @Bean(name = "redis7Template")
// public RedisTemplate<String, Object> redis7Template() {
// RedisTemplate<String, Object> template = new RedisTemplate<>();
// template.setConnectionFactory(redis7ConnectionFactory());
// template.setKeySerializer(new StringRedisSerializer());
// template.setValueSerializer(new StringRedisSerializer());
// return template;
// }
//
//}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/controllerv2/TrendControllerV2.java
View file @
9c0c62b3
...
...
@@ -231,9 +231,27 @@ public class TrendControllerV2 {
try
{
result
=
trendServiceV2
.
optStrategyResultInfo
(
id
);
}
catch
(
Exception
e
)
{
log
.
error
(
"态势监测-
事件告警-历史列表
:"
,
e
);
log
.
error
(
"态势监测-
策略推荐-优化策略
:"
,
e
);
JsonViewObject
.
newInstance
().
success
(
result
);
}
return
JsonViewObject
.
newInstance
().
success
(
result
);
}
@ApiOperation
(
value
=
"态势监测-策略推荐-绿波优化相位差"
,
notes
=
"态势监测-策略推荐-绿波优化相位差"
,
response
=
JsonViewObject
.
class
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@GetMapping
(
value
=
"/optStrategyCrossOffsetList"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
OptMonitoringVO
.
class
),
})
public
JsonViewObject
optStrategyCrossOffsetList
(
Integer
id
)
throws
Exception
{
GreenOptCrossOffsetVO
greenOptCrossOffsetVO
=
new
GreenOptCrossOffsetVO
();
try
{
greenOptCrossOffsetVO
=
trendServiceV2
.
optStrategyCrossOffsetList
(
id
);
}
catch
(
Exception
e
)
{
log
.
error
(
"态势监测-策略推荐-绿波优化相位差:"
,
e
);
JsonViewObject
.
newInstance
().
success
(
greenOptCrossOffsetVO
);
}
return
JsonViewObject
.
newInstance
().
success
(
greenOptCrossOffsetVO
);
}
}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/servicev2/TrendServiceV2.java
View file @
9c0c62b3
...
...
@@ -31,4 +31,6 @@ public interface TrendServiceV2 {
String
optStrategyResultInfo
(
String
id
)
throws
Exception
;
GreenOptCrossOffsetVO
optStrategyCrossOffsetList
(
Integer
id
)
throws
Exception
;
}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/servicev2/implv2/TrendServiceV2Impl.java
View file @
9c0c62b3
package
net
.
wanji
.
opt
.
servicev2
.
implv2
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.github.pagehelper.PageHelper
;
import
com.github.pagehelper.PageInfo
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.utils.tool.DateUtil
;
import
net.wanji.common.utils.tool.JacksonUtils
;
import
net.wanji.databus.dao.entity.BaseCrossSchemePO
;
import
net.wanji.databus.dao.entity.GreenwaveCrossPO
;
import
net.wanji.databus.dao.entity.GreenwaveHistPO
;
import
net.wanji.databus.dao.mapper.CrossDataHistMapper
;
import
net.wanji.databus.dao.mapper.GreenwaveHistMapper
;
import
net.wanji.databus.dao.mapper.*
;
import
net.wanji.databus.po.CrossDataHistPO
;
import
net.wanji.databus.vo.LightsStatusVO2
;
import
net.wanji.opt.common.RedisUtils
;
import
net.wanji.opt.common.enums.EventInfoTypeEnum
;
import
net.wanji.opt.common.enums.GreenBeltDirEnum
;
import
net.wanji.opt.dao.mapper.GreenWaveRealTimeMapperV2Mapper
;
...
...
@@ -22,7 +28,6 @@ import net.wanji.opt.vo2.dto.CrossLastOptResultDTO;
import
net.wanji.opt.vo2.dto.GreenLastOptResultDTO
;
import
net.wanji.opt.vo2.dto.GreenOptDTO
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.StringUtils
;
...
...
@@ -52,12 +57,18 @@ public class TrendServiceV2Impl implements TrendServiceV2 {
private
GreenwaveHistMapper
greenwaveHistMapper
;
@Resource
private
StrategyGreenOptHistMapper
greenOptHistMapper
;
@Resource
private
GreenwaveCrossMapper
greenwaveCrossMapper
;
@Resource
private
StrategyGreenOptHistMapper
strategyGreenOptHistMapper
;
@Resource
private
RedisUtils
redisUtil
;
@Resource
private
BaseCrossSchemeMapper
baseCrossSchemeMapper
;
private
static
List
<
OptMonitoringVO
>
greenListCache
=
new
ArrayList
<>(
10
);
private
static
List
<
OptMonitoringVO
>
crossListCache
=
new
ArrayList
<>(
80
);
@Autowired
private
StrategyGreenOptHistMapper
strategyGreenOptHistMapper
;
@Override
public
List
<
CrossGreenStatusTimeRateVO
>
crossGreenStatusTimeRate
()
{
...
...
@@ -380,4 +391,48 @@ public class TrendServiceV2Impl implements TrendServiceV2 {
}
return
sb
.
toString
();
}
@Override
public
GreenOptCrossOffsetVO
optStrategyCrossOffsetList
(
Integer
id
)
throws
Exception
{
GreenOptCrossOffsetVO
greenOptCrossOffsetVO
=
new
GreenOptCrossOffsetVO
();
try
{
List
<
GreenOptCrossOffsetVO
.
CrossOffsetDetail
>
oriOffsetDetails
=
new
ArrayList
<>();
List
<
GreenOptCrossOffsetVO
.
CrossOffsetDetail
>
curOffsetDetails
=
new
ArrayList
<>();
ObjectMapper
mapper
=
JacksonUtils
.
getInstance
();
List
<
GreenwaveCrossPO
>
greenwaveCrossPOS
=
greenwaveCrossMapper
.
selectByGreenwaveId
(
id
);
for
(
GreenwaveCrossPO
greenwaveCrossPO
:
greenwaveCrossPOS
)
{
String
crossId
=
greenwaveCrossPO
.
getCrossId
();
Object
lightStr
=
redisUtil
.
getHash
(
"utc_light_status"
,
crossId
);
if
(
StringUtils
.
isEmpty
(
lightStr
))
{
continue
;
}
List
<
LightsStatusVO2
>
lightsStatusVO2s
=
mapper
.
readValue
(
String
.
valueOf
(
lightStr
),
new
TypeReference
<
List
<
LightsStatusVO2
>>()
{});
String
schemeId
=
lightsStatusVO2s
.
get
(
0
).
getSchemeId
();
Integer
schemeNo
=
Integer
.
valueOf
(
schemeId
);
GreenOptCrossOffsetVO
.
CrossOffsetDetail
crossOffsetDetail
=
new
GreenOptCrossOffsetVO
.
CrossOffsetDetail
();
GreenOptCrossOffsetVO
.
CrossOffsetDetail
detail
=
getOriOffsetDetail
(
crossId
,
schemeNo
,
crossOffsetDetail
);
oriOffsetDetails
.
add
(
detail
);
curOffsetDetails
.
add
(
detail
);
}
greenOptCrossOffsetVO
.
setOriCrossOffsets
(
oriOffsetDetails
);
greenOptCrossOffsetVO
.
setCurCrossOffsets
(
curOffsetDetails
);
}
catch
(
Exception
e
)
{
log
.
error
(
"态势监测-策略推荐-绿波优化相位差查询失败:{}"
,
e
);
throw
new
RuntimeException
(
e
);
}
return
greenOptCrossOffsetVO
;
}
private
GreenOptCrossOffsetVO
.
CrossOffsetDetail
getOriOffsetDetail
(
String
crossId
,
Integer
schemeNo
,
GreenOptCrossOffsetVO
.
CrossOffsetDetail
crossOffsetDetail
)
{
BaseCrossSchemePO
baseCrossSchemePO
=
baseCrossSchemeMapper
.
selectByCrossIdAndSchemeNo
(
crossId
,
schemeNo
);
crossOffsetDetail
.
setOffset
(
0
);
if
(
Objects
.
nonNull
(
baseCrossSchemePO
))
{
Integer
offset
=
baseCrossSchemePO
.
getOffset
();
crossOffsetDetail
.
setCrossId
(
crossId
);
crossOffsetDetail
.
setSchemeNo
(
schemeNo
);
crossOffsetDetail
.
setOffset
(
offset
);
}
return
crossOffsetDetail
;
}
}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/vo2/GreenOptCrossOffsetVO.java
0 → 100644
View file @
9c0c62b3
package
net
.
wanji
.
opt
.
vo2
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.util.List
;
/**
* @author duanruiming
* @date 2025/03/18 10:11
*/
@Data
@ApiModel
(
value
=
"GreenOptCrossOffsetVO"
,
description
=
"态势监测-策略推荐-绿波优化相位差实体"
)
public
class
GreenOptCrossOffsetVO
{
@ApiModelProperty
(
value
=
"原始路口相位差列表"
)
private
List
<
CrossOffsetDetail
>
oriCrossOffsets
;
@ApiModelProperty
(
value
=
"当前路口相位差列表"
)
private
List
<
CrossOffsetDetail
>
curCrossOffsets
;
@Data
@ApiModel
(
value
=
"CrossOffsetDetail"
,
description
=
""
)
public
static
class
CrossOffsetDetail
{
@ApiModelProperty
(
value
=
"路口编号"
)
private
String
crossId
;
@ApiModelProperty
(
value
=
"方案相位差"
)
private
Integer
offset
;
@ApiModelProperty
(
value
=
"方案号"
)
private
Integer
schemeNo
;
}
}
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