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
0589d627
Commit
0589d627
authored
Mar 06, 2023
by
duanruiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[add] 添加相位方案缓存
parent
5523315a
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
175 additions
and
56 deletions
+175
-56
CrossDirTurnPhaseCache.java
...main/java/net/wanji/opt/cache/CrossDirTurnPhaseCache.java
+2
-1
CrossPhaseInfoCache.java
...rc/main/java/net/wanji/opt/cache/CrossPhaseInfoCache.java
+57
-0
CrossSchemeInfoCache.java
...c/main/java/net/wanji/opt/cache/CrossSchemeInfoCache.java
+72
-0
CrossOptimizeServiceImpl.java
.../net/wanji/opt/service/impl/CrossOptimizeServiceImpl.java
+44
-55
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/cache/CrossDirTurnPhaseCache.java
View file @
0589d627
...
@@ -34,6 +34,7 @@ public class CrossDirTurnPhaseCache implements CommandLineRunner {
...
@@ -34,6 +34,7 @@ public class CrossDirTurnPhaseCache implements CommandLineRunner {
CrossSchemeService
crossSchemeService
;
CrossSchemeService
crossSchemeService
;
/**
/**
* 当前时间路口运行的方案相位转向数据信息
* 统一获取缓存方法
* 统一获取缓存方法
* key: crossId-dir-turn value:CrossPhaseDTO
* key: crossId-dir-turn value:CrossPhaseDTO
*
*
...
@@ -114,7 +115,7 @@ public class CrossDirTurnPhaseCache implements CommandLineRunner {
...
@@ -114,7 +115,7 @@ public class CrossDirTurnPhaseCache implements CommandLineRunner {
}
}
}
}
long
end
=
System
.
currentTimeMillis
();
long
end
=
System
.
currentTimeMillis
();
log
.
info
(
"加载
区域基础信息到
缓存耗时:{}ms,条数据,size={}"
,
(
end
-
start
),
phaseMap
.
size
());
log
.
info
(
"加载
路口当前运行的方案相位转向
缓存耗时:{}ms,条数据,size={}"
,
(
end
-
start
),
phaseMap
.
size
());
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"相位方向转向缓存初始化失败"
,
e
);
log
.
error
(
"相位方向转向缓存初始化失败"
,
e
);
}
}
...
...
signal-optimize-service/src/main/java/net/wanji/opt/cache/CrossPhaseInfoCache.java
0 → 100644
View file @
0589d627
package
net
.
wanji
.
opt
.
cache
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.framework.Constants
;
import
net.wanji.opt.dao.mapper.CrossPhaseMapper
;
import
net.wanji.opt.po.base.CrossPhasePO
;
import
org.springframework.boot.CommandLineRunner
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.CollectionUtils
;
import
javax.annotation.Resource
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* @author duanruiming
* @date 2023/03/06 15:03
*/
@Component
@Slf4j
public
class
CrossPhaseInfoCache
implements
CommandLineRunner
{
@Resource
CrossPhaseMapper
crossPhaseMapper
;
private
static
Map
<
String
,
List
<
CrossPhasePO
>>
crossPhaseInfoMap
=
new
HashMap
<>();
public
static
Map
<
String
,
List
<
CrossPhasePO
>>
getCrossPhaseInfoCache
()
{
return
crossPhaseInfoMap
;
}
public
static
List
<
CrossPhasePO
>
getCrossPhaseCacheByCrossId
(
String
crossId
)
{
if
(!
crossPhaseInfoMap
.
isEmpty
())
{
return
crossPhaseInfoMap
.
get
(
crossId
);
}
return
Collections
.
EMPTY_LIST
;
}
public
void
refresh
()
{
init
();
}
@Override
public
void
run
(
String
...
args
)
throws
Exception
{
init
();
}
public
void
init
()
{
List
<
CrossPhasePO
>
crossPhasePOS
=
crossPhaseMapper
.
listCrossPhase
(
Constants
.
SystemParam
.
NULL
,
Constants
.
SystemParam
.
NULL
);
if
(!
CollectionUtils
.
isEmpty
(
crossPhasePOS
))
{
crossPhaseInfoMap
=
crossPhasePOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossPhasePO:
:
getCrossId
));
}
}
}
signal-optimize-service/src/main/java/net/wanji/opt/cache/CrossSchemeInfoCache.java
0 → 100644
View file @
0589d627
package
net
.
wanji
.
opt
.
cache
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.framework.Constants
;
import
net.wanji.opt.dao.mapper.CrossSchemeMapper
;
import
net.wanji.opt.po.base.CrossSchemePO
;
import
org.springframework.boot.CommandLineRunner
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.CollectionUtils
;
import
javax.annotation.Resource
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* @author duanruiming
* @date 2023/03/06 14:30
*/
@Component
@Slf4j
public
class
CrossSchemeInfoCache
implements
CommandLineRunner
{
@Resource
CrossSchemeMapper
crossSchemeMapper
;
/**
* key:crossId_id value:CrossSchemePO
*/
private
static
Map
<
String
,
CrossSchemePO
>
crossSchemeInfoMap
=
new
HashMap
<>();
public
static
Map
<
String
,
CrossSchemePO
>
getCrossSchemeInfosCache
()
{
return
crossSchemeInfoMap
;
}
public
static
CrossSchemePO
geteSchemePOCache
(
String
key
)
{
if
(!
crossSchemeInfoMap
.
isEmpty
())
{
return
crossSchemeInfoMap
.
get
(
key
);
}
return
null
;
}
public
void
refresh
()
{
init
();
}
@Override
public
void
run
(
String
...
args
)
throws
Exception
{
init
();
}
private
void
init
()
{
try
{
long
start
=
System
.
currentTimeMillis
();
List
<
CrossSchemePO
>
crossSchemePOS
=
crossSchemeMapper
.
listCrossSchemeInfo
(
Constants
.
SystemParam
.
NULL
,
Constants
.
SystemParam
.
NULL
,
null
);
if
(!
CollectionUtils
.
isEmpty
(
crossSchemePOS
))
{
crossSchemePOS
.
forEach
(
crossSchemePO
->
{
String
crossId
=
crossSchemePO
.
getCrossId
();
Integer
schemeId
=
crossSchemePO
.
getId
();
String
key
=
String
.
join
(
"_"
,
crossId
,
String
.
valueOf
(
schemeId
));
crossSchemeInfoMap
.
put
(
key
,
crossSchemePO
);
});
}
long
end
=
System
.
currentTimeMillis
();
log
.
info
(
"加载路口方案信息到缓存耗时:{}ms,条数据,size={}"
,
(
end
-
start
),
crossSchemeInfoMap
.
size
());
}
catch
(
Exception
e
)
{
log
.
info
(
"加载路口方案信息到缓存失败"
,
e
);
}
}
}
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/CrossOptimizeServiceImpl.java
View file @
0589d627
...
@@ -33,13 +33,15 @@ import org.springframework.stereotype.Service;
...
@@ -33,13 +33,15 @@ import org.springframework.stereotype.Service;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.CollectionUtils
;
import
javax.annotation.PostConstruct
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.time.ZoneOffset
;
import
java.time.ZoneOffset
;
import
java.util.*
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
import
static
net
.
wanji
.
opt
.
cache
.
CrossPhaseInfoCache
.
getCrossPhaseCacheByCrossId
;
import
static
net
.
wanji
.
opt
.
cache
.
CrossSchemeInfoCache
.
geteSchemePOCache
;
/**
/**
* @author hfx
* @author hfx
* @date 2023/1/10 15:15
* @date 2023/1/10 15:15
...
@@ -79,17 +81,6 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
...
@@ -79,17 +81,6 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
static
Set
<
String
>
CROSS_OPT
=
new
HashSet
<>();
// 记录已优化的路口
static
Set
<
String
>
CROSS_OPT
=
new
HashSet
<>();
// 记录已优化的路口
/**
* 解决静态方法中不能使用mapper
*/
private
static
CrossOptimizeServiceImpl
crossOptimizeService
;
@PostConstruct
public
void
init
()
{
crossOptimizeService
=
this
;
crossOptimizeService
.
crossPhaseMapper
=
this
.
crossPhaseMapper
;
crossOptimizeService
.
crossSchemeMapper
=
this
.
crossSchemeMapper
;
}
@Override
@Override
@Transactional
@Transactional
public
String
realtimeOptimize
(
List
<
CrossDataRealtimePO
>
abnormalCrossList
,
List
<
CrossDataRealtimePO
>
crossDataRealtimePOList
)
{
public
String
realtimeOptimize
(
List
<
CrossDataRealtimePO
>
abnormalCrossList
,
List
<
CrossDataRealtimePO
>
crossDataRealtimePOList
)
{
...
@@ -512,52 +503,50 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
...
@@ -512,52 +503,50 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
}
}
Integer
schemeId
=
crossPhaseDTO
.
getSchemeId
();
Integer
schemeId
=
crossPhaseDTO
.
getSchemeId
();
List
<
CrossSchemePO
>
crossSchemePOS
=
crossOptimizeService
.
crossSchemeMapper
.
listCrossSchemeInfo
(
crossId
,
null
,
schemeId
);
CrossSchemePO
crossSchemePO
=
geteSchemePOCache
(
String
.
join
(
"_"
,
crossId
,
String
.
valueOf
(
schemeId
)));
List
<
CrossPhasePO
>
crossPhasePOS
=
crossOptimizeService
.
crossPhaseMapper
.
listCrossPhase
(
crossId
,
String
.
valueOf
(
schemeId
));
Map
<
Integer
,
List
<
CrossPhasePO
>>
ringNoPhasePOMap
=
getCrossPhaseCacheByCrossId
(
crossId
).
stream
().
collect
(
Collectors
.
groupingBy
(
CrossPhasePO:
:
getRingNo
));
Map
<
Integer
,
List
<
CrossPhasePO
>>
ringNoPhasePOMap
=
crossPhasePOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossPhasePO:
:
getRingNo
));
SchemeSendVO
schemeSendVO
=
new
SchemeSendVO
();
SchemeSendVO
schemeSendVO
=
new
SchemeSendVO
();
List
<
SchemeSendVO
.
Pattern
>
patternList
=
new
ArrayList
<>();
List
<
SchemeSendVO
.
Pattern
>
patternList
=
new
ArrayList
<>();
crossSchemePOS
.
forEach
(
crossSchemePO
->
{
if
(
Objects
.
nonNull
(
crossSchemePO
))
{
SchemeSendVO
.
Pattern
pattern
=
new
SchemeSendVO
.
Pattern
();
SchemeSendVO
.
Pattern
pattern
=
new
SchemeSendVO
.
Pattern
();
pattern
.
setPatternName
(
"实时监测优化方案"
.
concat
(
crossSchemePO
.
getSchemeNo
()));
pattern
.
setPatternName
(
"实时监测优化方案"
.
concat
(
crossSchemePO
.
getSchemeNo
()));
pattern
.
setPatternNo
(
String
.
valueOf
(
crossSchemePO
.
getId
()));
pattern
.
setPatternNo
(
String
.
valueOf
(
crossSchemePO
.
getId
()));
pattern
.
setCycle
(
String
.
valueOf
(
crossSchemePO
.
getCycle
()));
pattern
.
setCycle
(
String
.
valueOf
(
crossSchemePO
.
getCycle
()));
pattern
.
setOffset
(
String
.
valueOf
(
crossSchemePO
.
getOffset
()));
pattern
.
setOffset
(
String
.
valueOf
(
crossSchemePO
.
getOffset
()));
pattern
.
setCoordPhase
(
String
.
valueOf
(
crossSchemePO
.
getCoordPhase
()));
pattern
.
setCoordPhase
(
String
.
valueOf
(
crossSchemePO
.
getCoordPhase
()));
List
<
SchemeSendVO
.
Pattern
.
Ring
>
rings
=
new
ArrayList
<>();
List
<
SchemeSendVO
.
Pattern
.
Ring
>
rings
=
new
ArrayList
<>();
ringNoPhasePOMap
.
entrySet
().
forEach
(
entry
->
{
ringNoPhasePOMap
.
entrySet
().
forEach
(
entry
->
{
SchemeSendVO
.
Pattern
.
Ring
ring
=
new
SchemeSendVO
.
Pattern
.
Ring
();
SchemeSendVO
.
Pattern
.
Ring
ring
=
new
SchemeSendVO
.
Pattern
.
Ring
();
List
<
SchemeSendVO
.
Pattern
.
Ring
.
Phase
>
phaseList
=
new
ArrayList
<>();
List
<
SchemeSendVO
.
Pattern
.
Ring
.
Phase
>
phaseList
=
new
ArrayList
<>();
List
<
CrossPhasePO
>
value
=
entry
.
getValue
();
List
<
CrossPhasePO
>
value
=
entry
.
getValue
();
value
.
forEach
(
crossPhasePO
->
{
value
.
forEach
(
crossPhasePO
->
{
SchemeSendVO
.
Pattern
.
Ring
.
Phase
phase
=
new
SchemeSendVO
.
Pattern
.
Ring
.
Phase
();
SchemeSendVO
.
Pattern
.
Ring
.
Phase
phase
=
new
SchemeSendVO
.
Pattern
.
Ring
.
Phase
();
phase
.
setPhaseNo
(
crossPhasePO
.
getPhaseNo
());
phase
.
setPhaseNo
(
crossPhasePO
.
getPhaseNo
());
phase
.
setPhaseName
(
crossPhasePO
.
getName
());
phase
.
setPhaseName
(
crossPhasePO
.
getName
());
phase
.
setSort
(
String
.
valueOf
(
crossPhasePO
.
getSort
()));
phase
.
setSort
(
String
.
valueOf
(
crossPhasePO
.
getSort
()));
phase
.
setControlMode
(
String
.
valueOf
(
crossPhasePO
.
getControlMode
()));
phase
.
setControlMode
(
String
.
valueOf
(
crossPhasePO
.
getControlMode
()));
phase
.
setMinGreenTime
(
String
.
valueOf
(
crossPhasePO
.
getMinGreenTime
()));
phase
.
setMinGreenTime
(
String
.
valueOf
(
crossPhasePO
.
getMinGreenTime
()));
phase
.
setMaxGreenTime
(
String
.
valueOf
(
crossPhasePO
.
getMaxGreenTime
()));
phase
.
setMaxGreenTime
(
String
.
valueOf
(
crossPhasePO
.
getMaxGreenTime
()));
// 可优化时间
// 可优化时间
Integer
currentPhaseOffset
=
getCurrentPhaseOptOffsetTime
(
phaseTimeOptResultMap
,
crossPhasePO
.
getPhaseNo
());
Integer
currentPhaseOffset
=
getCurrentPhaseOptOffsetTime
(
phaseTimeOptResultMap
,
crossPhasePO
.
getPhaseNo
());
phase
.
setPhaseTime
(
String
.
valueOf
(
crossPhasePO
.
getPhaseTime
()
+
currentPhaseOffset
));
phase
.
setPhaseTime
(
String
.
valueOf
(
crossPhasePO
.
getPhaseTime
()
+
currentPhaseOffset
));
phase
.
setGreenTime
(
String
.
valueOf
(
crossPhasePO
.
getGreenTime
()
+
currentPhaseOffset
));
phase
.
setGreenTime
(
String
.
valueOf
(
crossPhasePO
.
getGreenTime
()
+
currentPhaseOffset
));
phase
.
setGreenFlashTime
(
String
.
valueOf
(
crossPhasePO
.
getGreenFlashTime
()));
phase
.
setGreenFlashTime
(
String
.
valueOf
(
crossPhasePO
.
getGreenFlashTime
()));
phase
.
setPedFlashTime
(
String
.
valueOf
(
crossPhasePO
.
getPedFlashTime
()));
phase
.
setPedFlashTime
(
String
.
valueOf
(
crossPhasePO
.
getPedFlashTime
()));
phase
.
setYellowTime
(
String
.
valueOf
(
crossPhasePO
.
getYellowTime
()));
phase
.
setYellowTime
(
String
.
valueOf
(
crossPhasePO
.
getYellowTime
()));
phase
.
setRedTime
(
String
.
valueOf
(
crossPhasePO
.
getRedTime
()));
phase
.
setRedTime
(
String
.
valueOf
(
crossPhasePO
.
getRedTime
()));
phaseList
.
add
(
phase
);
phaseList
.
add
(
phase
);
});
});
ring
.
setRingNo
(
String
.
valueOf
(
entry
.
getKey
()));
ring
.
setRingNo
(
String
.
valueOf
(
entry
.
getKey
()));
ring
.
setPhaseList
(
phaseList
);
ring
.
setPhaseList
(
phaseList
);
rings
.
add
(
ring
);
rings
.
add
(
ring
);
});
});
pattern
.
setRings
(
rings
);
pattern
.
setRings
(
rings
);
patternList
.
add
(
pattern
);
patternList
.
add
(
pattern
);
}
}
);
schemeSendVO
.
setCrossCode
(
crossId
);
schemeSendVO
.
setCrossCode
(
crossId
);
schemeSendVO
.
setPatternList
(
patternList
);
schemeSendVO
.
setPatternList
(
patternList
);
...
...
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