Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
W
wj-datacenter-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
wj-datacenter-platform
Commits
8b8f1620
Commit
8b8f1620
authored
Jul 05, 2024
by
duanruiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[update] review-代码逻辑优化
parent
439eb54a
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
95 additions
and
83 deletions
+95
-83
DataCenterTask.java
...c/main/java/net/wanji/datacenter/task/DataCenterTask.java
+42
-37
DataProcessTask.java
.../main/java/net/wanji/datacenter/task/DataProcessTask.java
+53
-46
No files found.
wj-datacenter-service/src/main/java/net/wanji/datacenter/task/DataCenterTask.java
View file @
8b8f1620
...
@@ -62,51 +62,56 @@ public class DataCenterTask {
...
@@ -62,51 +62,56 @@ public class DataCenterTask {
int
greenDelayTime
=
0
;
// 每个路口绿波开始时间
int
greenDelayTime
=
0
;
// 每个路口绿波开始时间
List
<
GreenwaveCrossPO
>
greenwaveCrossPOList
=
entry
.
getValue
();
List
<
GreenwaveCrossPO
>
greenwaveCrossPOList
=
entry
.
getValue
();
if
(!
CollectionUtils
.
isEmpty
(
greenwaveCrossPOList
))
{
if
(!
CollectionUtils
.
isEmpty
(
greenwaveCrossPOList
))
{
for
(
GreenwaveCrossPO
greenwaveCrossPO
:
greenwaveCrossPOList
)
{
greenwaveWidth
=
calculate
(
greenwaveWidth
,
lastCrossDistance
,
crossTimeOffset
,
greenDelayTime
,
greenwaveCrossPOList
);
String
crossId
=
greenwaveCrossPO
.
getCrossId
();
}
Integer
sectionId
=
greenwaveCrossPO
.
getSectionId
();
log
.
info
(
"当前绿波编号:{}, 绿波带宽:{}"
,
greenId
,
greenwaveWidth
);
Integer
inDir
=
greenwaveCrossPO
.
getInDir
();
}
Integer
offset
=
greenwaveCrossPO
.
getOffset
();
}
catch
(
Exception
e
)
{
crossTimeOffset
+=
(
int
)
(
lastCrossDistance
/
(
100
/
6
));
// 自由流速度60
log
.
error
(
"获取绿波带宽异常"
,
e
);
if
(
sectionId
!=
null
)
{
throw
new
Exception
(
"获取绿波带宽异常"
,
e
);
CrossSectionPO
crossSectionPO
=
baseCrossSectionMapper
.
selectById
(
sectionId
);
}
if
(
Objects
.
nonNull
(
crossSectionPO
))
{
}
Integer
schemeId
=
crossSectionPO
.
getSchemeId
();
BaseCrossSchemePO
baseCrossSchemePO
=
baseCrossSchemeMapper
.
selectById
(
schemeId
);
private
int
calculate
(
int
greenwaveWidth
,
Double
lastCrossDistance
,
int
crossTimeOffset
,
int
greenDelayTime
,
List
<
GreenwaveCrossPO
>
greenwaveCrossPOList
)
{
if
(
Objects
.
nonNull
(
baseCrossSchemePO
))
{
for
(
GreenwaveCrossPO
greenwaveCrossPO
:
greenwaveCrossPOList
)
{
String
schemeNo
=
baseCrossSchemePO
.
getSchemeNo
();
String
crossId
=
greenwaveCrossPO
.
getCrossId
();
List
<
CrossSchemePhaseDirTurnDTO
>
crossSchemePhaseDirTurnDTOList
=
CrossSchemePhaseLightsCache
.
crossSchemePhaseDirTurnDTOList
;
Integer
sectionId
=
greenwaveCrossPO
.
getSectionId
();
if
(!
CollectionUtils
.
isEmpty
(
crossSchemePhaseDirTurnDTOList
))
{
Integer
inDir
=
greenwaveCrossPO
.
getInDir
();
Integer
offset
=
greenwaveCrossPO
.
getOffset
();
crossTimeOffset
+=
(
int
)
(
lastCrossDistance
/
(
100
/
6
));
// 自由流速度60
if
(
sectionId
!=
null
)
{
CrossSectionPO
crossSectionPO
=
baseCrossSectionMapper
.
selectById
(
sectionId
);
if
(
Objects
.
nonNull
(
crossSectionPO
))
{
Integer
schemeId
=
crossSectionPO
.
getSchemeId
();
BaseCrossSchemePO
baseCrossSchemePO
=
baseCrossSchemeMapper
.
selectById
(
schemeId
);
if
(
Objects
.
nonNull
(
baseCrossSchemePO
))
{
String
schemeNo
=
baseCrossSchemePO
.
getSchemeNo
();
List
<
CrossSchemePhaseDirTurnDTO
>
crossSchemePhaseDirTurnDTOList
=
CrossSchemePhaseLightsCache
.
crossSchemePhaseDirTurnDTOList
;
if
(!
CollectionUtils
.
isEmpty
(
crossSchemePhaseDirTurnDTOList
))
{
// 过滤路口编号,方案号,直行或者圆饼灯,
// 过滤路口编号,方案号,直行或者圆饼灯,
List
<
CrossSchemePhaseDirTurnDTO
>
currenSchemeList
=
crossSchemePhaseDirTurnDTOList
.
stream
().
filter
(
po
->
StringUtils
.
equals
(
crossId
,
po
.
getCrossId
())
&&
List
<
CrossSchemePhaseDirTurnDTO
>
currenSchemeList
=
crossSchemePhaseDirTurnDTOList
.
stream
().
filter
(
po
->
StringUtils
.
equals
(
crossId
,
po
.
getCrossId
())
&&
StringUtils
.
equals
(
po
.
getSchemeNo
(),
schemeNo
)
&&
StringUtils
.
equals
(
po
.
getSchemeNo
(),
schemeNo
)
&&
(
Objects
.
equals
(
po
.
getLightsTurn
(),
3
)
||
Objects
.
equals
(
po
.
getLightsTurn
(),
1
))).
collect
(
Collectors
.
toList
());
(
Objects
.
equals
(
po
.
getLightsTurn
(),
3
)
||
Objects
.
equals
(
po
.
getLightsTurn
(),
1
))).
collect
(
Collectors
.
toList
());
Integer
lastPhaseTime
=
0
;
// 上一个相位的时间
Integer
lastPhaseTime
=
0
;
// 上一个相位的时间
for
(
CrossSchemePhaseDirTurnDTO
dto
:
currenSchemeList
)
{
for
(
CrossSchemePhaseDirTurnDTO
dto
:
currenSchemeList
)
{
// 当前路口方案绿波方向的绿灯时间
// 当前路口方案绿波方向的绿灯时间
lastPhaseTime
+=
dto
.
getPhaseTime
();
lastPhaseTime
+=
dto
.
getPhaseTime
();
if
(
Objects
.
equals
(
inDir
,
dto
.
getLightsDir
()))
{
if
(
Objects
.
equals
(
inDir
,
dto
.
getLightsDir
()))
{
lastPhaseTime
-=
dto
.
getPhaseTime
();
lastPhaseTime
-=
dto
.
getPhaseTime
();
greenDelayTime
=
lastPhaseTime
>
greenDelayTime
?
lastPhaseTime
:
greenDelayTime
;
greenDelayTime
=
lastPhaseTime
>
greenDelayTime
?
lastPhaseTime
:
greenDelayTime
;
Integer
greenWaveStartIndex
=
offset
+
greenDelayTime
+
crossTimeOffset
;
Integer
greenWaveStartIndex
=
offset
+
greenDelayTime
+
crossTimeOffset
;
Integer
greenWaveEndIndex
=
offset
+
dto
.
getPhaseTime
();
Integer
greenWaveEndIndex
=
offset
+
dto
.
getPhaseTime
();
greenwaveWidth
=
Math
.
min
(
greenwaveWidth
,
greenWaveEndIndex
-
greenWaveStartIndex
);
greenwaveWidth
=
Math
.
min
(
greenwaveWidth
,
greenWaveEndIndex
-
greenWaveStartIndex
);
}
}
}
}
}
}
}
}
}
lastCrossDistance
=
greenwaveCrossPO
.
getNextCrossLen
();
}
}
}
}
log
.
info
(
"当前绿波编号:{}, 绿波带宽:{}"
,
greenId
,
greenwaveWidth
);
}
}
}
catch
(
Exception
e
)
{
lastCrossDistance
=
greenwaveCrossPO
.
getNextCrossLen
();
log
.
error
(
"获取绿波带宽异常"
,
e
);
throw
new
Exception
(
"获取绿波带宽异常"
,
e
);
}
}
return
greenwaveWidth
;
}
}
}
}
wj-datacenter-service/src/main/java/net/wanji/datacenter/task/DataProcessTask.java
View file @
8b8f1620
...
@@ -12,7 +12,6 @@ import net.wanji.datacenter.cache.CrossSchemePhaseLightsCache;
...
@@ -12,7 +12,6 @@ import net.wanji.datacenter.cache.CrossSchemePhaseLightsCache;
import
net.wanji.datacenter.kafka.ConsumerHandler
;
import
net.wanji.datacenter.kafka.ConsumerHandler
;
import
net.wanji.datacenter.pojo.dto.CrossSchemePhaseDirTurnDTO
;
import
net.wanji.datacenter.pojo.dto.CrossSchemePhaseDirTurnDTO
;
import
net.wanji.datacenter.pojo.dto.CrossSnapshotDataDTO
;
import
net.wanji.datacenter.pojo.dto.CrossSnapshotDataDTO
;
import
net.wanji.datacenter.pojo.dto.LanePeriodicDataDTO
;
import
net.wanji.datacenter.service.impl.LanePeriodicDataProcessServiceImpl
;
import
net.wanji.datacenter.service.impl.LanePeriodicDataProcessServiceImpl
;
import
net.wanji.feign.service.UtcFeignClients
;
import
net.wanji.feign.service.UtcFeignClients
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.StringUtils
;
...
@@ -52,59 +51,67 @@ public class DataProcessTask {
...
@@ -52,59 +51,67 @@ public class DataProcessTask {
return
;
return
;
}
}
List
<
LightsStatusVO
>
lightsStatusVOS
=
JacksonUtils
.
getInstance
().
convertValue
(
jsonViewObject
.
getContent
(),
new
TypeReference
<
List
<
LightsStatusVO
>>()
{
List
<
LightsStatusVO
>
lightsStatusVOS
=
JacksonUtils
.
getInstance
().
convertValue
(
jsonViewObject
.
getContent
(),
new
TypeReference
<
List
<
LightsStatusVO
>>()
{});
});
calculateData
(
lightsStatusVOS
);
for
(
LightsStatusVO
lightsStatusVO
:
lightsStatusVOS
)
{
}
catch
(
Exception
e
)
{
String
crossId
=
lightsStatusVO
.
getCrossId
();
// log.error("",e);
String
schemeNo
=
lightsStatusVO
.
getSchemeId
();
}
String
currentPhaseId
=
lightsStatusVO
.
getPhaseId
();
// 当前相位红灯说明都是红灯,全场红
}
long
currenSignalTime
=
Long
.
parseLong
(
lightsStatusVO
.
getSchemeStartTime
());
ConcurrentHashMap
<
String
,
Integer
>
crossIdPhaseIdClearGreenMap
=
CrossRealTimeCache
.
crossPhaseCarNumsMap
;
private
void
calculateData
(
List
<
LightsStatusVO
>
lightsStatusVOS
)
throws
Exception
{
getClearRateCache
(
crossId
,
currentPhaseId
,
crossIdPhaseIdClearGreenMap
);
for
(
LightsStatusVO
lightsStatusVO
:
lightsStatusVOS
)
{
Map
<
String
,
Object
>
dirLampGroupMap
=
lightsStatusVO
.
getDirLampGroupMap
();
String
crossId
=
lightsStatusVO
.
getCrossId
();
boolean
isAllRed
=
true
;
String
schemeNo
=
lightsStatusVO
.
getSchemeId
();
if
(!
dirLampGroupMap
.
isEmpty
())
{
String
currentPhaseId
=
lightsStatusVO
.
getPhaseId
();
// 当前相位红灯说明都是红灯,全场红
for
(
Map
.
Entry
<
String
,
Object
>
entry
:
dirLampGroupMap
.
entrySet
())
{
long
currenSignalTime
=
Long
.
parseLong
(
lightsStatusVO
.
getSchemeStartTime
());
Map
<
String
,
String
>
turnLightColorMap
=
(
Map
<
String
,
String
>)
entry
.
getValue
();
ConcurrentHashMap
<
String
,
Integer
>
crossIdPhaseIdClearGreenMap
=
CrossRealTimeCache
.
crossPhaseCarNumsMap
;
for
(
Map
.
Entry
<
String
,
String
>
colorEntry
:
turnLightColorMap
.
entrySet
())
{
getClearRateCache
(
crossId
,
currentPhaseId
,
crossIdPhaseIdClearGreenMap
);
String
lightColor
=
colorEntry
.
getValue
();
Map
<
String
,
Object
>
dirLampGroupMap
=
lightsStatusVO
.
getDirLampGroupMap
();
// 全场红,如果有一个绿灯就不计算 20行人跳过
// 是否是全场红
String
key
=
colorEntry
.
getKey
();
boolean
isAllRed
=
getAllRed
(
dirLampGroupMap
);
if
(
Objects
.
equals
(
lightColor
,
"green"
)
&&
!
StringUtils
.
equals
(
key
,
"20"
))
{
// 如果全场红
isAllRed
=
false
;
if
(
isAllRed
)
{
}
List
<
CrossSchemePhaseDirTurnDTO
>
crossSchemePhaseDirTurnDTOList
=
CrossSchemePhaseLightsCache
.
crossSchemePhaseDirTurnDTOList
;
int
redTime
=
2
;
if
(!
CollectionUtils
.
isEmpty
(
crossSchemePhaseDirTurnDTOList
))
{
for
(
CrossSchemePhaseDirTurnDTO
dto
:
crossSchemePhaseDirTurnDTOList
)
{
String
crossIdCache
=
dto
.
getCrossId
();
String
schemeNoCache
=
dto
.
getSchemeNo
();
String
phaseNoCache
=
dto
.
getPhaseNo
();
if
(
StringUtils
.
equals
(
crossIdCache
,
crossId
)
&&
StringUtils
.
equals
(
schemeNoCache
,
schemeNo
)
&&
StringUtils
.
equals
(
currentPhaseId
,
phaseNoCache
))
{
redTime
=
dto
.
getRedTime
();
}
}
}
}
// 剩余红灯时间
if
(
redTime
>=
1
)
{
--
redTime
;
}
Integer
carNums
=
getCarNums
(
crossId
,
currenSignalTime
+
redTime
*
1000L
);
startPhaseIdMap
.
putIfAbsent
(
crossId
,
currentPhaseId
);
crossIdPhaseIdClearGreenMap
.
put
(
crossId
.
concat
(
currentPhaseId
),
carNums
);
}
}
LanePeriodicDataProcessServiceImpl
.
periodHaveAllRedMap
.
put
(
crossId
,
1
);
}
}
}
// 如果全场红
private
static
boolean
getAllRed
(
Map
<
String
,
Object
>
dirLampGroupMap
)
{
if
(
isAllRed
)
{
boolean
isAllRed
=
true
;
List
<
CrossSchemePhaseDirTurnDTO
>
crossSchemePhaseDirTurnDTOList
=
CrossSchemePhaseLightsCache
.
crossSchemePhaseDirTurnDTOList
;
if
(!
dirLampGroupMap
.
isEmpty
())
{
int
redTime
=
2
;
for
(
Map
.
Entry
<
String
,
Object
>
entry
:
dirLampGroupMap
.
entrySet
())
{
if
(!
CollectionUtils
.
isEmpty
(
crossSchemePhaseDirTurnDTOList
))
{
Map
<
String
,
String
>
turnLightColorMap
=
(
Map
<
String
,
String
>)
entry
.
getValue
();
for
(
CrossSchemePhaseDirTurnDTO
dto
:
crossSchemePhaseDirTurnDTOList
)
{
for
(
Map
.
Entry
<
String
,
String
>
colorEntry
:
turnLightColorMap
.
entrySet
())
{
String
crossIdCache
=
dto
.
getCrossId
();
String
lightColor
=
colorEntry
.
getValue
();
String
schemeNoCache
=
dto
.
getSchemeNo
();
// 全场红,如果有一个绿灯就不计算 20行人跳过
String
phaseNoCache
=
dto
.
getPhaseNo
();
String
key
=
colorEntry
.
getKey
();
if
(
StringUtils
.
equals
(
crossIdCache
,
crossId
)
&&
StringUtils
.
equals
(
schemeNoCache
,
schemeNo
)
if
(
Objects
.
equals
(
lightColor
,
"green"
)
&&
!
StringUtils
.
equals
(
key
,
"20"
))
{
&&
StringUtils
.
equals
(
currentPhaseId
,
phaseNoCache
))
{
isAllRed
=
false
;
redTime
=
dto
.
getRedTime
();
}
}
// 剩余红灯时间
if
(
redTime
>=
1
)
{
--
redTime
;
}
Integer
carNums
=
getCarNums
(
crossId
,
currenSignalTime
+
redTime
*
1000L
);
startPhaseIdMap
.
putIfAbsent
(
crossId
,
currentPhaseId
);
crossIdPhaseIdClearGreenMap
.
put
(
crossId
.
concat
(
currentPhaseId
),
carNums
);
}
}
LanePeriodicDataProcessServiceImpl
.
periodHaveAllRedMap
.
put
(
crossId
,
1
);
}
}
}
}
}
catch
(
Exception
e
)
{
// log.error("",e);
}
}
return
isAllRed
;
}
}
private
void
getClearRateCache
(
String
crossId
,
String
currentPhaseId
,
Map
<
String
,
Integer
>
crossIdPhaseIdClearGreenMap
)
throws
JsonProcessingException
{
private
void
getClearRateCache
(
String
crossId
,
String
currentPhaseId
,
Map
<
String
,
Integer
>
crossIdPhaseIdClearGreenMap
)
throws
JsonProcessingException
{
...
...
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