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
77827f7f
Commit
77827f7f
authored
Nov 07, 2024
by
zhouleilei
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
4e36080c
c8bd4dae
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
253 additions
and
4 deletions
+253
-4
SynthesisOptimizeLogInfoMapper.java
.../wanji/opt/dao/mapper/SynthesisOptimizeLogInfoMapper.java
+11
-0
SynthesisConsumerHandler.java
...in/java/net/wanji/opt/kafka/SynthesisConsumerHandler.java
+106
-0
StrategyControlController.java
...i/opt/synthesis/controller/StrategyControlController.java
+3
-0
StrategyControlDataReq.java
.../net/wanji/opt/synthesis/pojo/StrategyControlDataReq.java
+1
-1
SynthesisOptimizeLogEntity.java
.../wanji/opt/synthesis/pojo/SynthesisOptimizeLogEntity.java
+56
-0
SynthesisOptimizeLogInfo.java
...et/wanji/opt/synthesis/pojo/SynthesisOptimizeLogInfo.java
+69
-0
PushStrategyControlServiceImpl.java
...ynthesis/service/impl/PushStrategyControlServiceImpl.java
+4
-1
StrategyControlServiceImpl.java
...pt/synthesis/service/impl/StrategyControlServiceImpl.java
+3
-2
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/dao/mapper/SynthesisOptimizeLogInfoMapper.java
0 → 100644
View file @
77827f7f
package
net
.
wanji
.
opt
.
dao
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
net.wanji.opt.synthesis.pojo.SynthesisOptimizeLogEntity
;
/**
* @author duanruiming
* @date 2024/11/06 17:20
*/
public
interface
SynthesisOptimizeLogInfoMapper
extends
BaseMapper
<
SynthesisOptimizeLogEntity
>
{
}
signal-optimize-service/src/main/java/net/wanji/opt/kafka/SynthesisConsumerHandler.java
0 → 100644
View file @
77827f7f
package
net
.
wanji
.
opt
.
kafka
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
lombok.NonNull
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.utils.tool.JacksonUtils
;
import
net.wanji.common.utils.tool.StringUtils
;
import
net.wanji.opt.dao.mapper.SynthesisOptimizeLogInfoMapper
;
import
net.wanji.opt.synthesis.pojo.SynthesisOptimizeLogEntity
;
import
net.wanji.opt.synthesis.pojo.SynthesisOptimizeLogInfo
;
import
org.apache.kafka.clients.consumer.Consumer
;
import
org.apache.kafka.clients.consumer.ConsumerRecord
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.kafka.annotation.KafkaListener
;
import
org.springframework.kafka.listener.KafkaListenerErrorHandler
;
import
org.springframework.kafka.listener.ListenerExecutionFailedException
;
import
org.springframework.kafka.support.Acknowledgment
;
import
org.springframework.messaging.Message
;
import
org.springframework.stereotype.Component
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.annotation.Resource
;
/**
* @author duanruiming
* @date 2024/11/05 20:45
*/
@Component
@Slf4j
@RequiredArgsConstructor
public
class
SynthesisConsumerHandler
implements
KafkaListenerErrorHandler
{
@Resource
private
SynthesisOptimizeLogInfoMapper
synthesisOptimizeLogInfoMapper
;
private
String
str
=
"{\n"
+
" \"cross_id\":\"cross0001\", \n"
+
"\t\"control_id\":\"123456\", \n"
+
"\t\"provider\":\"hisense\", \n"
+
"\t\"plan_no\":4, \n"
+
"\t\"cycle\":100, \n"
+
"\t\"offset\":10, \n"
+
"\t\"ring_cnt\":3, \n"
+
"\t\"ring_set\":[[[1,2],[3,4]],[[5,6],[7,8]],[[9,10],[11,12]]],\n"
+
"\t\"seq_id\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16], \n"
+
"\t\"red_time\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\n"
+
"\t\"yellow_time\":[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],\n"
+
"\t\"green_time\":[20,0,10,20,20,30,60,0,0,0,0,0,0,0,0,0],\n"
+
"\t\"green_flash\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\n"
+
"\t\"person_flash\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\n"
+
"\t\"min_green\":[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3], \n"
+
"\t\"max_green\":[100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100],\n"
+
"\t\"direction\":[[[1,2],[3,4]],[[5,6],[7,8]],[[9,10],[11,12]]],\n"
+
"\t\"timestamp\":\"2024-11-10 10:10:10\",\n"
+
"\t\"strategy\":0,\n"
+
"\t\"greenbelt_id\": \"road1\"\n"
+
"}"
;
@Transactional
@KafkaListener
(
topics
=
{
"t_synthesis_optimize_log_info"
})
public
void
crossSchemeOptLogSave
(
ConsumerRecord
<
Object
,
Object
>
record
,
Acknowledgment
acknowledgment
)
throws
Exception
{
try
{
String
data
=
String
.
valueOf
(
record
.
value
());
if
(
StringUtils
.
isNotBlank
(
data
))
{
ObjectMapper
instance
=
JacksonUtils
.
getInstance
();
SynthesisOptimizeLogInfo
synthesisOptimizeLogInfo
=
instance
.
readValue
(
data
,
SynthesisOptimizeLogInfo
.
class
);
SynthesisOptimizeLogEntity
synthesisOptimizeLogEntity
=
new
SynthesisOptimizeLogEntity
();
BeanUtils
.
copyProperties
(
synthesisOptimizeLogInfo
,
synthesisOptimizeLogEntity
);
synthesisOptimizeLogEntity
.
setRingSet
(
instance
.
writeValueAsString
(
synthesisOptimizeLogInfo
.
getRingSet
()));
synthesisOptimizeLogEntity
.
setDirection
(
instance
.
writeValueAsString
(
synthesisOptimizeLogInfo
.
getDirection
()));
synthesisOptimizeLogEntity
.
setSeqId
(
instance
.
writeValueAsString
(
synthesisOptimizeLogInfo
.
getSeqId
()));
synthesisOptimizeLogEntity
.
setRedTime
(
instance
.
writeValueAsString
(
synthesisOptimizeLogInfo
.
getRedTime
()));
synthesisOptimizeLogEntity
.
setYellowTime
(
instance
.
writeValueAsString
(
synthesisOptimizeLogInfo
.
getYellowTime
()));
synthesisOptimizeLogEntity
.
setGreenTime
(
instance
.
writeValueAsString
(
synthesisOptimizeLogInfo
.
getGreenTime
()));
synthesisOptimizeLogEntity
.
setGreenFlash
(
instance
.
writeValueAsString
(
synthesisOptimizeLogInfo
.
getGreenFlash
()));
synthesisOptimizeLogEntity
.
setPersonFlash
(
instance
.
writeValueAsString
(
synthesisOptimizeLogInfo
.
getPersonFlash
()));
synthesisOptimizeLogEntity
.
setMinGreen
(
instance
.
writeValueAsString
(
synthesisOptimizeLogInfo
.
getMinGreen
()));
synthesisOptimizeLogEntity
.
setMaxGreen
(
instance
.
writeValueAsString
(
synthesisOptimizeLogInfo
.
getMaxGreen
()));
synthesisOptimizeLogInfoMapper
.
insert
(
synthesisOptimizeLogEntity
);
}
acknowledgment
.
acknowledge
();
}
catch
(
Exception
e
)
{
log
.
error
(
"消费神思方案优化历史数据异常:"
,
e
);
throw
new
Exception
(
e
);
}
}
@Override
@NonNull
public
Object
handleError
(
Message
<?>
message
,
ListenerExecutionFailedException
e
)
{
return
new
Object
();
}
@Override
@NonNull
public
Object
handleError
(
Message
<?>
message
,
ListenerExecutionFailedException
exception
,
Consumer
<?,
?>
consumer
)
{
String
errorMessage
=
String
.
format
(
"监听主题:%s,消费者详情:%s,异常信息:%s,消息详情:%s"
,
consumer
.
listTopics
(),
consumer
.
groupMetadata
(),
exception
,
message
);
log
.
error
(
errorMessage
);
return
KafkaListenerErrorHandler
.
super
.
handleError
(
message
,
exception
,
consumer
);
}
}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/synthesis/controller/StrategyControlController.java
View file @
77827f7f
...
@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiOperation;
...
@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiOperation;
import
io.swagger.annotations.ApiResponse
;
import
io.swagger.annotations.ApiResponse
;
import
io.swagger.annotations.ApiResponses
;
import
io.swagger.annotations.ApiResponses
;
import
net.wanji.common.framework.rest.JsonViewObject
;
import
net.wanji.common.framework.rest.JsonViewObject
;
import
net.wanji.opt.dao.mapper.SynthesisOptimizeLogInfoMapper
;
import
net.wanji.opt.po.StrategyControlDataEntity
;
import
net.wanji.opt.po.StrategyControlDataEntity
;
import
net.wanji.opt.synthesis.pojo.StrategyControlVO
;
import
net.wanji.opt.synthesis.pojo.StrategyControlVO
;
import
net.wanji.opt.synthesis.service.StrategyControlService
;
import
net.wanji.opt.synthesis.service.StrategyControlService
;
...
@@ -28,6 +29,8 @@ public class StrategyControlController {
...
@@ -28,6 +29,8 @@ public class StrategyControlController {
@Resource
@Resource
private
StrategyControlService
strategyControlService
;
private
StrategyControlService
strategyControlService
;
@Resource
SynthesisOptimizeLogInfoMapper
synthesisOptimizeLogInfoMapper
;
@ApiOperation
(
value
=
"策略控制信息操作"
,
notes
=
"策略控制信息操作"
,
@ApiOperation
(
value
=
"策略控制信息操作"
,
notes
=
"策略控制信息操作"
,
response
=
JsonViewObject
.
class
,
response
=
JsonViewObject
.
class
,
...
...
signal-optimize-service/src/main/java/net/wanji/opt/synthesis/pojo/StrategyControlDataReq.java
View file @
77827f7f
...
@@ -25,7 +25,7 @@ public class StrategyControlDataReq {
...
@@ -25,7 +25,7 @@ public class StrategyControlDataReq {
private
Integer
strategy
;
private
Integer
strategy
;
private
String
schedule_start
;
private
String
schedule_start
;
private
String
schedule_end
;
private
String
schedule_end
;
private
List
<
Time_table
>
time
;
private
List
<
Time_table
>
time
_table
;
/**
/**
* 调控频率(秒),策略下发的频率(只针对失衡和绿波带有效)
* 调控频率(秒),策略下发的频率(只针对失衡和绿波带有效)
*/
*/
...
...
signal-optimize-service/src/main/java/net/wanji/opt/synthesis/pojo/SynthesisOptimizeLogEntity.java
0 → 100644
View file @
77827f7f
package
net
.
wanji
.
opt
.
synthesis
.
pojo
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
java.util.Date
;
/**
* @author duanruiming
* @date 2024/11/06 18:25
*/
@Data
@TableName
(
"t_synthesis_optimize_log_info"
)
public
class
SynthesisOptimizeLogEntity
{
@TableId
(
type
=
IdType
.
AUTO
)
private
Integer
id
;
// 自增ID
@TableField
(
"cross_id"
)
private
String
crossId
;
// 路口Id
@TableField
(
"control_id"
)
private
String
controlId
;
// 信号机路口id
private
String
provider
;
// 信号机厂商hisense/ehualu
@TableField
(
"plan_no"
)
private
Integer
planNo
;
// 基础配时方案号
private
Integer
cycle
;
// 周期
private
Integer
offset
;
// 相位差
@TableField
(
"ring_cnt"
)
private
Integer
ringCnt
;
// 环数量
@TableField
(
"ring_set"
)
private
String
ringSet
;
// 环中相位顺序
@TableField
(
"seq_id"
)
private
String
seqId
;
// 相位id
@TableField
(
"red_time"
)
private
String
redTime
;
// 红灯时间
@TableField
(
"yellow_time"
)
private
String
yellowTime
;
// 黄灯时间
@TableField
(
"green_time"
)
private
String
greenTime
;
// 绿灯时间
@TableField
(
"green_flash"
)
private
String
greenFlash
;
// 绿闪时间
@TableField
(
"person_flash"
)
private
String
personFlash
;
// 行闪时间
@TableField
(
"min_green"
)
private
String
minGreen
;
// 最小绿
@TableField
(
"max_green"
)
private
String
maxGreen
;
// 最大绿
private
String
direction
;
// 相位方向
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
Date
timestamp
;
// 结束时间
private
Integer
strategy
;
// 策略类型,0=绿波带,1=失衡
@TableField
(
"greenbelt_id"
)
private
String
greenbeltId
;
// 所属绿波带id(失衡可为空)
}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/synthesis/pojo/SynthesisOptimizeLogInfo.java
0 → 100644
View file @
77827f7f
package
net
.
wanji
.
opt
.
synthesis
.
pojo
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
lombok.Data
;
import
java.util.Date
;
/**
* @author duanruiming
* @date 2024/11/06 17:18
*/
@Data
public
class
SynthesisOptimizeLogInfo
{
@TableId
(
type
=
IdType
.
AUTO
)
private
Integer
id
;
// 自增ID
@TableField
(
"cross_id"
)
@JsonProperty
(
"cross_id"
)
private
String
crossId
;
// 路口Id
@TableField
(
"control_id"
)
@JsonProperty
(
"control_id"
)
private
String
controlId
;
// 信号机路口id
private
String
provider
;
// 信号机厂商hisense/ehualu
@TableField
(
"plan_no"
)
@JsonProperty
(
"plan_no"
)
private
Integer
planNo
;
// 基础配时方案号
private
Integer
cycle
;
// 周期
private
Integer
offset
;
// 相位差
@TableField
(
"ring_cnt"
)
@JsonProperty
(
"ring_cnt"
)
private
Integer
ringCnt
;
// 环数量
@TableField
(
"ring_set"
)
@JsonProperty
(
"ring_set"
)
private
int
[][][]
ringSet
;
// 环中相位顺序
@TableField
(
"seq_id"
)
@JsonProperty
(
"seq_id"
)
private
int
[]
seqId
;
// 相位id
@TableField
(
"red_time"
)
@JsonProperty
(
"red_time"
)
private
int
[]
redTime
;
// 红灯时间
@TableField
(
"yellow_time"
)
@JsonProperty
(
"yellow_time"
)
private
int
[]
yellowTime
;
// 黄灯时间
@TableField
(
"green_time"
)
@JsonProperty
(
"green_time"
)
private
int
[]
greenTime
;
// 绿灯时间
@TableField
(
"green_flash"
)
@JsonProperty
(
"green_flash"
)
private
int
[]
greenFlash
;
// 绿闪时间
@TableField
(
"person_flash"
)
@JsonProperty
(
"person_flash"
)
private
int
[]
personFlash
;
// 行闪时间
@TableField
(
"min_green"
)
@JsonProperty
(
"min_green"
)
private
int
[]
minGreen
;
// 最小绿
@TableField
(
"max_green"
)
@JsonProperty
(
"max_green"
)
private
int
[]
maxGreen
;
// 最大绿
private
Integer
[][][]
direction
;
// 相位方向
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
Date
timestamp
;
// 结束时间
private
Integer
strategy
;
// 策略类型,0=绿波带,1=失衡
@TableField
(
"greenbelt_id"
)
@JsonProperty
(
"greenbelt_id"
)
private
String
greenbeltId
;
// 所属绿波带id(失衡可为空)
}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/synthesis/service/impl/PushStrategyControlServiceImpl.java
View file @
77827f7f
...
@@ -8,6 +8,7 @@ import net.wanji.opt.synthesis.pojo.Result;
...
@@ -8,6 +8,7 @@ import net.wanji.opt.synthesis.pojo.Result;
import
net.wanji.opt.synthesis.pojo.StrategyControlReq
;
import
net.wanji.opt.synthesis.pojo.StrategyControlReq
;
import
net.wanji.opt.synthesis.service.PushStrategyControlService
;
import
net.wanji.opt.synthesis.service.PushStrategyControlService
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
/**
/**
...
@@ -18,9 +19,11 @@ import org.springframework.stereotype.Service;
...
@@ -18,9 +19,11 @@ import org.springframework.stereotype.Service;
@Slf4j
@Slf4j
public
class
PushStrategyControlServiceImpl
implements
PushStrategyControlService
{
public
class
PushStrategyControlServiceImpl
implements
PushStrategyControlService
{
@Value
(
"${synthesis.strategyUrl}"
)
private
String
url
;
@Override
@Override
public
Result
push
(
StrategyControlReq
req
)
throws
Exception
{
public
Result
push
(
StrategyControlReq
req
)
throws
Exception
{
String
url
=
"
"
;
//String url = "http://37.12.182.50:8082/api/traffic/strategy/info
";
try
{
try
{
ObjectMapper
mapper
=
JacksonUtils
.
getInstance
();
ObjectMapper
mapper
=
JacksonUtils
.
getInstance
();
String
resultStr
=
RestTemplateTool
.
post
(
url
,
mapper
.
writeValueAsString
(
req
));
String
resultStr
=
RestTemplateTool
.
post
(
url
,
mapper
.
writeValueAsString
(
req
));
...
...
signal-optimize-service/src/main/java/net/wanji/opt/synthesis/service/impl/StrategyControlServiceImpl.java
View file @
77827f7f
...
@@ -70,6 +70,7 @@ public class StrategyControlServiceImpl implements StrategyControlService {
...
@@ -70,6 +70,7 @@ public class StrategyControlServiceImpl implements StrategyControlService {
BeanUtils
.
copyProperties
(
entity
,
dataVO
);
BeanUtils
.
copyProperties
(
entity
,
dataVO
);
entity
.
setTime
(
JacksonUtils
.
getInstance
().
writeValueAsString
(
dataVO
.
getTime
()));
entity
.
setTime
(
JacksonUtils
.
getInstance
().
writeValueAsString
(
dataVO
.
getTime
()));
if
(
StringUtils
.
equals
(
"insert"
,
dataVO
.
getAction
()))
{
if
(
StringUtils
.
equals
(
"insert"
,
dataVO
.
getAction
()))
{
entity
.
setId
(
null
);
strategyControlInfoMapper
.
insert
(
entity
);
strategyControlInfoMapper
.
insert
(
entity
);
}
else
if
(
StringUtils
.
equals
(
"update"
,
dataVO
.
getAction
()))
{
}
else
if
(
StringUtils
.
equals
(
"update"
,
dataVO
.
getAction
()))
{
strategyControlInfoMapper
.
updateById
(
entity
);
strategyControlInfoMapper
.
updateById
(
entity
);
...
@@ -100,10 +101,10 @@ public class StrategyControlServiceImpl implements StrategyControlService {
...
@@ -100,10 +101,10 @@ public class StrategyControlServiceImpl implements StrategyControlService {
timeTable
.
setWeek
(
item
.
getWeek
());
timeTable
.
setWeek
(
item
.
getWeek
());
timeTables
.
add
(
timeTable
);
timeTables
.
add
(
timeTable
);
});
});
detailData
.
setTime
(
timeTables
);
detailData
.
setTime
_table
(
timeTables
);
detailData
.
setFreq
(
dataVO
.
getFrequency
());
detailData
.
setFreq
(
dataVO
.
getFrequency
());
detailData
.
setStatus
(
dataVO
.
getStatus
());
detailData
.
setStatus
(
dataVO
.
getStatus
());
detailData
.
setAction
(
dataVO
.
getAction
());
detailData
.
setAction
(
StringUtils
.
equals
(
"update"
,
dataVO
.
getAction
())
?
"insert"
:
dataVO
.
getAction
());
dataReqList
.
add
(
detailData
);
dataReqList
.
add
(
detailData
);
req
.
setData
(
dataReqList
);
req
.
setData
(
dataReqList
);
}
}
...
...
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