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
7c85da5e
Commit
7c85da5e
authored
May 19, 2023
by
hanbing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[add] 快速特勤,自动解锁
parent
ca7a3a38
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
92 additions
and
0 deletions
+92
-0
ConsumerHandler.java
...ce/src/main/java/net/wanji/web/kafka/ConsumerHandler.java
+84
-0
SpecialServiceCrossMapper.java
.../java/net/wanji/web/mapper/SpecialServiceCrossMapper.java
+2
-0
SpecialServiceCrossMapper.xml
...e/src/main/resources/mapper/SpecialServiceCrossMapper.xml
+6
-0
No files found.
signal-control-service/src/main/java/net/wanji/web/kafka/ConsumerHandler.java
View file @
7c85da5e
package
net
.
wanji
.
web
.
kafka
;
import
cn.hutool.core.util.StrUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
lombok.NonNull
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.gts.GeometryUtil
;
import
net.wanji.common.gts.GeomsConvertUtil
;
import
net.wanji.common.utils.tool.CrossUtil
;
import
net.wanji.databus.dao.mapper.BaseCrossInfoMapper
;
import
net.wanji.databus.po.BaseCrossInfoPO
;
import
net.wanji.databus.vo.LockControlVO
;
import
net.wanji.feign.service.UtcFeignClients
;
import
net.wanji.web.mapper.SpecialServiceCrossMapper
;
import
net.wanji.web.mapper.SpecialServiceMapper
;
import
net.wanji.web.po.SpecialServiceCrossPO
;
import
net.wanji.web.po.SpecialServicePO
;
import
org.apache.kafka.clients.consumer.Consumer
;
import
org.apache.kafka.clients.consumer.ConsumerRecord
;
import
org.locationtech.jts.geom.Geometry
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.kafka.annotation.KafkaListener
;
import
org.springframework.kafka.listener.KafkaListenerErrorHandler
;
import
org.springframework.kafka.listener.ListenerExecutionFailedException
;
...
...
@@ -12,6 +26,9 @@ import org.springframework.kafka.support.Acknowledgment;
import
org.springframework.messaging.Message
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.PostConstruct
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
...
...
@@ -22,6 +39,40 @@ import java.util.concurrent.ConcurrentHashMap;
@Slf4j
@Component
public
class
ConsumerHandler
implements
KafkaListenerErrorHandler
{
private
final
SpecialServiceMapper
specialServiceMapper
;
private
final
SpecialServiceCrossMapper
specialServiceCrossMapper
;
private
final
BaseCrossInfoMapper
baseCrossInfoMapper
;
private
final
UtcFeignClients
utcFeignClients
;
private
List
<
String
>
carPlates
=
new
ArrayList
<>();
private
List
<
BaseCrossInfoPO
>
crossList
=
new
ArrayList
<>();
public
ConsumerHandler
(
SpecialServiceMapper
specialServiceMapper
,
SpecialServiceCrossMapper
specialServiceCrossMapper
,
BaseCrossInfoMapper
baseCrossInfoMapper
,
@Qualifier
(
"net.wanji.feign.service.UtcFeignClients"
)
UtcFeignClients
utcFeignClients
)
{
this
.
specialServiceMapper
=
specialServiceMapper
;
this
.
specialServiceCrossMapper
=
specialServiceCrossMapper
;
this
.
baseCrossInfoMapper
=
baseCrossInfoMapper
;
this
.
utcFeignClients
=
utcFeignClients
;
}
@PostConstruct
private
void
initCarplates
()
{
List
<
SpecialServicePO
>
specialServicePOList
=
specialServiceMapper
.
selectAll
();
for
(
SpecialServicePO
specialServicePO
:
specialServicePOList
)
{
String
plateNum
=
specialServicePO
.
getPlateNum
();
if
(
StrUtil
.
isNotEmpty
(
plateNum
))
{
carPlates
.
add
(
plateNum
);
}
}
}
@PostConstruct
private
void
initCrossList
()
{
List
<
SpecialServiceCrossPO
>
unLockCrosses
=
specialServiceCrossMapper
.
selectByAutoUnlock
();
for
(
SpecialServiceCrossPO
unLockCross
:
unLockCrosses
)
{
String
crossId
=
unLockCross
.
getCrossId
();
BaseCrossInfoPO
baseCrossInfoPO
=
baseCrossInfoMapper
.
selectById
(
crossId
);
crossList
.
add
(
baseCrossInfoPO
);
}
}
/**
* kafka数据缓存
...
...
@@ -50,6 +101,39 @@ public class ConsumerHandler implements KafkaListenerErrorHandler {
JNMatchResultMiniData
jnMatchResultMiniData
=
JSONObject
.
parseObject
((
String
)
record
.
value
(),
JNMatchResultMiniData
.
class
);
carInfoMap
.
put
(
record
.
topic
(),
jnMatchResultMiniData
);
acknowledgment
.
acknowledge
();
// 特勤车辆经过自动解锁路口
List
<
JNMatchResultMiniData
.
E1FrameParticipant
>
carList
=
jnMatchResultMiniData
.
getE1FrameParticipant
();
for
(
JNMatchResultMiniData
.
E1FrameParticipant
car
:
carList
)
{
String
picLicense
=
car
.
getPicLicense
();
// 是否是特勤车辆
for
(
String
carPlate
:
carPlates
)
{
if
(
StrUtil
.
equals
(
picLicense
,
carPlate
))
{
// 判断是否经过自动解锁路口
for
(
BaseCrossInfoPO
cross
:
crossList
)
{
// 车辆位置
double
carLong
=
car
.
getLongitude
();
double
carLat
=
car
.
getLatitude
();
String
carLonLatStr
=
carLong
+
","
+
carLat
;
Geometry
carGeo
=
GeometryUtil
.
str2Geometry
(
carLonLatStr
);
// 路口缓冲区
String
crossLocation
=
cross
.
getLocation
();
double
[]
crossLonLat
=
CrossUtil
.
getLonLat
(
crossLocation
);
String
crossLonLatStr
=
crossLonLat
[
0
]
+
","
+
crossLonLat
[
1
];
Geometry
crossGeo
=
GeometryUtil
.
str2Geometry
(
crossLonLatStr
);
Geometry
crossBuff
=
GeomsConvertUtil
.
getGeometryBuf
(
crossGeo
,
"80.0"
);
if
(
carGeo
.
intersects
(
crossBuff
))
{
// 解锁
LockControlVO
vo
=
new
LockControlVO
();
vo
.
setCrossCode
(
cross
.
getId
());
vo
.
setCommand
(
0
);
vo
.
setDuration
(
999
);
vo
.
setPhaseList
(
new
ArrayList
<>());
utcFeignClients
.
lockControl
(
vo
);
}
}
}
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"监听主题消息异常, 异常信息"
,
e
);
}
...
...
signal-control-service/src/main/java/net/wanji/web/mapper/SpecialServiceCrossMapper.java
View file @
7c85da5e
...
...
@@ -52,4 +52,6 @@ public interface SpecialServiceCrossMapper {
void
deleteGroup
(
Integer
specialServiceId
,
String
groupName
);
void
updateAutoUnlock
(
String
crossId
,
Integer
autoUnlock
);
List
<
SpecialServiceCrossPO
>
selectByAutoUnlock
();
}
signal-control-service/src/main/resources/mapper/SpecialServiceCrossMapper.xml
View file @
7c85da5e
...
...
@@ -115,4 +115,10 @@
where cross_id = #{crossId}
</select>
<select
id=
"selectByAutoUnlock"
resultType=
"net.wanji.web.po.SpecialServiceCrossPO"
>
select
<include
refid=
"Base_Column_List"
></include>
from t_special_service_cross
where auto_unlock = 1
</select>
</mapper>
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