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
c6c0433d
Commit
c6c0433d
authored
Dec 30, 2024
by
zhoushiguang
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
80366e8f
6073c8be
Changes
26
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
490 additions
and
193 deletions
+490
-193
GreenBeltDirEnum.java
...ain/java/net/wanji/opt/common/enums/GreenBeltDirEnum.java
+27
-4
GreenBeltController.java
...t/wanji/opt/controller/signalopt/GreenBeltController.java
+6
-6
TrendServiceImpl.java
...ain/java/net/wanji/opt/service/impl/TrendServiceImpl.java
+3
-3
GreenBeltInfoService.java
...net/wanji/opt/service/signalopt/GreenBeltInfoService.java
+2
-4
GreenBeltServiceImpl.java
...anji/opt/service/signalopt/impl/GreenBeltServiceImpl.java
+159
-85
AbnormalCrossDetailVO.java
...src/main/java/net/wanji/opt/vo/AbnormalCrossDetailVO.java
+6
-1
GreenBeltKeyCrossFlowTimeVO.java
...in/java/net/wanji/opt/vo/GreenBeltKeyCrossFlowTimeVO.java
+23
-11
GreenBeltSpeedWidthVO.java
...src/main/java/net/wanji/opt/vo/GreenBeltSpeedWidthVO.java
+17
-10
DataBrainControlModeEnum.java
...ji/utc/hisense/common/enums/DataBrainControlModeEnum.java
+9
-3
SignalStatusServiceImpl.java
...nji/utc/hisense/service/impl/SignalStatusServiceImpl.java
+2
-2
OkHttpClientUtil.java
...ain/java/net/wanji/utc/hisense/util/OkHttpClientUtil.java
+1
-1
logback-spring.xml
...utc-hisense-service/src/main/resources/logback-spring.xml
+4
-4
ControlCommandStrategyServiceImpl.java
...rvice/control/impl/ControlCommandStrategyServiceImpl.java
+100
-18
WanJiControlCommandServiceImpl.java
.../service/control/impl/WanJiControlCommandServiceImpl.java
+31
-27
WanJiCommonStaticInfoServiceImpl.java
...ice/staticinfo/impl/WanJiCommonStaticInfoServiceImpl.java
+16
-3
SignalStatusTask.java
...ce/src/main/java/net/wanji/utc/task/SignalStatusTask.java
+1
-1
GreenwaveRealtimePO.java
...ava/net/wanji/databus/dao/entity/GreenwaveRealtimePO.java
+1
-1
SignalCommandLogPO.java
...java/net/wanji/databus/dao/entity/SignalCommandLogPO.java
+49
-0
CrossDirDataHistMapper.java
.../net/wanji/databus/dao/mapper/CrossDirDataHistMapper.java
+1
-0
SignalCommandLogPOMapper.java
...et/wanji/databus/dao/mapper/SignalCommandLogPOMapper.java
+13
-0
LightsStatusVO.java
...us/src/main/java/net/wanji/databus/vo/LightsStatusVO.java
+2
-1
LightsStatusVO2.java
...s/src/main/java/net/wanji/databus/vo/LightsStatusVO2.java
+2
-1
BaseCrossSchemeMapper.xml
...tabus/src/main/resources/mapper/BaseCrossSchemeMapper.xml
+2
-2
CrossDirDataHistMapper.xml
...abus/src/main/resources/mapper/CrossDirDataHistMapper.xml
+1
-1
GreenwaveHistMapper.xml
wj-databus/src/main/resources/mapper/GreenwaveHistMapper.xml
+7
-2
GreenwaveRealtimeMapper.xml
...bus/src/main/resources/mapper/GreenwaveRealtimeMapper.xml
+5
-2
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/common/enums/GreenBeltDirEnum.java
View file @
c6c0433d
...
...
@@ -4,20 +4,25 @@ import lombok.AllArgsConstructor;
import
lombok.Getter
;
import
net.wanji.common.utils.tool.StringUtils
;
import
java.util.Objects
;
/**
* @author duanruiming
* @date 2024/12/03 19:14
* @description
*/
@Getter
@AllArgsConstructor
public
enum
GreenBeltDirEnum
{
E2W
(
"e2w"
,
"东向西"
),
W2E
(
"w2e"
,
"西向东"
),
N2S
(
"n2s"
,
"北向南"
),
S2N
(
"s2n"
,
"南向北"
);
//
E2W
(
"e2w"
,
"东向西"
,
3
),
W2E
(
"w2e"
,
"西向东"
,
7
),
N2S
(
"n2s"
,
"北向南"
,
1
),
S2N
(
"s2n"
,
"南向北"
,
5
);
private
String
code
;
private
String
desc
;
private
Integer
inDir
;
public
static
String
getDesc
(
String
code
)
{
for
(
GreenBeltDirEnum
dirEnum
:
GreenBeltDirEnum
.
values
())
{
...
...
@@ -27,4 +32,22 @@ public enum GreenBeltDirEnum {
}
return
""
;
}
public
static
Integer
getInDir
(
String
code
)
{
for
(
GreenBeltDirEnum
value
:
GreenBeltDirEnum
.
values
())
{
if
(
StringUtils
.
equalsIgnoreCase
(
code
,
value
.
getCode
()))
{
return
value
.
getInDir
();
}
}
return
1
;
}
public
static
String
getInDirName
(
Integer
dir
)
{
for
(
GreenBeltDirEnum
value
:
GreenBeltDirEnum
.
values
())
{
if
(
Objects
.
equals
(
dir
,
value
.
getInDir
()))
{
return
value
.
getDesc
();
}
}
return
""
;
}
}
signal-optimize-service/src/main/java/net/wanji/opt/controller/signalopt/GreenBeltController.java
View file @
c6c0433d
...
...
@@ -55,13 +55,13 @@ public class GreenBeltController {
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
GreenBeltSpeedWidthVO
.
class
),
})
public
JsonViewObject
greenBeltSpeedWidth
(
Integer
greenId
)
{
Map
<
String
,
List
<
GreenBeltSpeedWidthVO
>>
map
=
Collections
.
EMPTY_MAP
;
List
<
GreenBeltSpeedWidthVO
>
list
=
Collections
.
EMPTY_LIST
;
try
{
map
=
greenBeltInfoService
.
greenBeltSpeedWidth
(
greenId
);
list
=
greenBeltInfoService
.
greenBeltSpeedWidth
(
greenId
);
}
catch
(
Exception
e
)
{
JsonViewObject
.
newInstance
().
fail
(
"绿波带宽曲线异常"
);
}
return
JsonViewObject
.
newInstance
().
success
(
map
);
return
JsonViewObject
.
newInstance
().
success
(
list
);
}
@ApiOperation
(
value
=
"绿波关键路口流量绿信比"
,
notes
=
"优化监测-绿波关键路口流量绿信比"
,
response
=
JsonViewObject
.
class
,
...
...
@@ -71,13 +71,13 @@ public class GreenBeltController {
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
GreenBeltKeyCrossFlowTimeVO
.
class
),
})
public
JsonViewObject
greenBeltKeyCrossFlowTime
(
Integer
greenId
)
{
Map
<
String
,
List
<
GreenBeltKeyCrossFlowTimeVO
>>
map
=
Collections
.
EMPTY_MAP
;
List
<
GreenBeltKeyCrossFlowTimeVO
>
list
=
Collections
.
EMPTY_LIST
;
try
{
map
=
greenBeltInfoService
.
greenBeltKeyCrossFlowTime
(
greenId
);
list
=
greenBeltInfoService
.
greenBeltKeyCrossFlowTime
(
greenId
);
}
catch
(
Exception
e
)
{
JsonViewObject
.
newInstance
().
fail
(
"绿波带宽曲线异常"
);
}
return
JsonViewObject
.
newInstance
().
success
(
map
);
return
JsonViewObject
.
newInstance
().
success
(
list
);
}
@ApiOperation
(
value
=
"干线详情"
,
notes
=
"优化监测-干线详情"
,
response
=
JsonViewObject
.
class
,
...
...
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/TrendServiceImpl.java
View file @
c6c0433d
...
...
@@ -452,9 +452,9 @@ public class TrendServiceImpl implements TrendService {
abnormalCrossDetailVO
.
setCrossStopTimes
(
crossDataRealtimePO
.
getStopTimes
());
abnormalCrossDetailVO
.
setSpeed
(
crossDataRealtimePO
.
getSpeed
());
Double
sturation
=
crossDataRealtimePO
.
getSturation
();
abnormalCrossDetailVO
.
setSturation
((
double
)
Math
.
round
(
sturation
)
*
100
);
String
serviceLevel
=
CrossUtil
.
getServiceLevel
(
sturation
);
abnormalCrossDetailVO
.
setServiceLevel
(
serviceLevel
);
abnormalCrossDetailVO
.
setSturation
((
int
)(
sturation
*
100
)
);
//
String serviceLevel = CrossUtil.getServiceLevel(sturation);
abnormalCrossDetailVO
.
setServiceLevel
(
crossDataRealtimePO
.
getServiceLevel
()
);
abnormalCrossDetailVO
.
setHourFlow
(
crossDataRealtimePO
.
getFlow
()
*
12
);
BigDecimal
bigDecimal
=
BigDecimal
.
valueOf
(
crossDataRealtimePO
.
getTrafficIndex
()).
setScale
(
2
,
RoundingMode
.
HALF_UP
);
abnormalCrossDetailVO
.
setCongestionIndex
(
bigDecimal
);
...
...
signal-optimize-service/src/main/java/net/wanji/opt/service/signalopt/GreenBeltInfoService.java
View file @
c6c0433d
...
...
@@ -6,15 +6,13 @@ import net.wanji.opt.vo.GreenBeltKeyCrossFlowTimeVO;
import
net.wanji.opt.vo.GreenBeltSpeedWidthVO
;
import
java.util.List
;
import
java.util.Map
;
/**
* @author duanruiming
* @date 2024/11/19 18:07
*/
public
interface
GreenBeltInfoService
{
List
<
GreenBeltFlowStopTimeVO
>
greenBeltCrossDetailHist
(
Integer
greenId
)
throws
Exception
;
Map
<
String
,
List
<
GreenBeltSpeedWidthVO
>
>
greenBeltSpeedWidth
(
Integer
greenId
)
throws
Exception
;
Map
<
String
,
List
<
GreenBeltKeyCrossFlowTimeVO
>
>
greenBeltKeyCrossFlowTime
(
Integer
greenId
)
throws
Exception
;
List
<
GreenBeltSpeedWidthVO
>
greenBeltSpeedWidth
(
Integer
greenId
)
throws
Exception
;
List
<
GreenBeltKeyCrossFlowTimeVO
>
greenBeltKeyCrossFlowTime
(
Integer
greenId
)
throws
Exception
;
GreenBeltCrossDetailVO
greenBeltCrossDetailList
(
Integer
greenId
)
throws
Exception
;
}
signal-optimize-service/src/main/java/net/wanji/opt/service/signalopt/impl/GreenBeltServiceImpl.java
View file @
c6c0433d
This diff is collapsed.
Click to expand it.
signal-optimize-service/src/main/java/net/wanji/opt/vo/AbnormalCrossDetailVO.java
View file @
c6c0433d
package
net
.
wanji
.
opt
.
vo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.fasterxml.jackson.databind.annotation.JsonSerialize
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
@@ -21,10 +22,13 @@ public class AbnormalCrossDetailVO {
@ApiModelProperty
(
value
=
"路口状态:0正常;1失衡;2拥堵;3溢出"
)
private
Integer
crossStatus
;
@ApiModelProperty
(
value
=
"最大排队"
)
@JsonSerialize
(
using
=
net
.
wanji
.
common
.
framework
.
DoubleSerialize
.
class
)
private
Double
crossQueueLength
;
@ApiModelProperty
(
value
=
"流率"
)
@JsonSerialize
(
using
=
net
.
wanji
.
common
.
framework
.
DoubleSerialize
.
class
)
private
Double
crossFlowRate
;
@ApiModelProperty
(
value
=
"平均停车次数"
)
@JsonSerialize
(
using
=
net
.
wanji
.
common
.
framework
.
DoubleSerialize
.
class
)
private
Double
crossStopTimes
;
@ApiModelProperty
(
value
=
"拥堵指数"
)
private
BigDecimal
congestionIndex
;
...
...
@@ -35,9 +39,10 @@ public class AbnormalCrossDetailVO {
@ApiModelProperty
(
value
=
"方向实时数据"
)
private
List
<
DirDataElement
>
dirData
;
@ApiModelProperty
(
value
=
"平均速度"
)
@JsonSerialize
(
using
=
net
.
wanji
.
common
.
framework
.
DoubleSerialize
.
class
)
private
Double
speed
;
@ApiModelProperty
(
value
=
"饱和度"
)
private
Double
sturation
;
private
Integer
sturation
;
@ApiModelProperty
(
value
=
"路口服务水平"
)
private
String
serviceLevel
;
@ApiModelProperty
(
value
=
"小时流量"
)
...
...
signal-optimize-service/src/main/java/net/wanji/opt/vo/GreenBeltKeyCrossFlowTimeVO.java
View file @
c6c0433d
package
net
.
wanji
.
opt
.
vo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.fasterxml.jackson.databind.annotation.JsonSerialize
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
net.wanji.opt.config.Double2TwoDecimalPlacesSerializer
;
import
java.util.Date
;
import
java.util.List
;
/**
* @author duanruiming
...
...
@@ -14,17 +17,26 @@ import java.util.Date;
@Data
@ApiModel
(
value
=
"优化监测-绿波关键路口流量绿信比实体"
)
public
class
GreenBeltKeyCrossFlowTimeVO
{
@ApiModelProperty
(
"干线方向"
)
private
String
dirName
;
@ApiModelProperty
(
"路口名称"
)
private
String
crossName
;
private
List
<
Detail
>
detailList
;
@Data
public
static
class
Detail
{
@ApiModelProperty
(
"路口编号"
)
private
String
crossId
;
@ApiModelProperty
(
"干线方向"
)
private
String
dir
;
@ApiModelProperty
(
"路口名称"
)
private
String
crossName
;
@ApiModelProperty
(
"时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
Date
startTime
;
@ApiModelProperty
(
"干线方向"
)
private
String
dirName
;
@ApiModelProperty
(
"流量"
)
private
Integer
flow
;
@ApiModelProperty
(
"绿信比"
)
@JsonSerialize
(
using
=
Double2TwoDecimalPlacesSerializer
.
class
)
private
Double
greenTimeRatio
;
}
}
signal-optimize-service/src/main/java/net/wanji/opt/vo/GreenBeltSpeedWidthVO.java
View file @
c6c0433d
...
...
@@ -8,6 +8,7 @@ import lombok.Data;
import
net.wanji.opt.config.Double2TwoDecimalPlacesSerializer
;
import
java.util.Date
;
import
java.util.List
;
/**
* @author duanruiming
...
...
@@ -16,15 +17,21 @@ import java.util.Date;
@Data
@ApiModel
(
value
=
"优化监测-绿波带宽曲线实体"
)
public
class
GreenBeltSpeedWidthVO
{
@ApiModelProperty
(
"干线方向名称"
)
private
String
dirName
;
private
List
<
Detail
>
detailList
;
@Data
public
static
class
Detail
{
@ApiModelProperty
(
"时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
Date
startTime
;
@ApiModelProperty
(
"干线方向"
)
private
String
dirName
;
private
String
dir
;
@ApiModelProperty
(
"速度"
)
@JsonSerialize
(
using
=
Double2TwoDecimalPlacesSerializer
.
class
)
private
Double
speed
;
@ApiModelProperty
(
"带宽"
)
@JsonSerialize
(
using
=
Double2TwoDecimalPlacesSerializer
.
class
)
private
Double
width
;
}
}
signal-utc-hisense-service/src/main/java/net/wanji/utc/hisense/common/enums/DataBrainControlModeEnum.java
View file @
c6c0433d
...
...
@@ -15,15 +15,21 @@ import java.util.Objects;
@AllArgsConstructor
@RequiredArgsConstructor
public
enum
DataBrainControlModeEnum
{
//海信线协调控制是单个干线绿波,区域协调控制是多个干线绿波,到万集都是21,绿波协调
//对信号机来说都是绿波协调
LOCK
(
2
,
52
,
"锁定"
),
ALL_RED
(
3
,
12
,
"全红"
),
YELLOW_FLASH
(
4
,
13
,
"黄闪"
),
CLOSED_FLASH
(
5
,
11
,
"关灯"
),
STEP_CONTROL
(
9
,
52
,
"步进"
),
FIX_CYCLE
(
11
,
21
,
"定周期"
),
SELF_ADAPTION
(
100
,
23
,
"单点自适应控制"
),
LINE_COORDINATE
(
100
,
31
,
"线协调控制"
),
REGION_COORDINATE
(
100
,
41
,
"区域协调控制"
),
SELF_ADAPTION
(
20
,
23
,
"单点自适应控制"
),
LINE_COORDINATE
(
21
,
31
,
"线协调控制"
),
REGION_COORDINATE
(
21
,
41
,
"区域协调控制"
),
MANUAL_CONTROL
(
31
,
51
,
"手动控制"
),
MANUAL_LOCK
(
31
,
52
,
"手动控制-锁定阶段"
),
MANUAL_TEMP_SCHEME
(
31
,
53
,
"手动控制-指定方案"
),
MANUAL_LOCK_CHANNEL
(
31
,
54
,
"手动控制-锁定通道"
),
TEMP_PLAN
(
255
,
53
,
"临时方案"
);
private
Integer
wjControl
;
...
...
signal-utc-hisense-service/src/main/java/net/wanji/utc/hisense/service/impl/SignalStatusServiceImpl.java
View file @
c6c0433d
...
...
@@ -264,12 +264,12 @@ public class SignalStatusServiceImpl implements SignalStatusService {
try
{
OkHttpClientUtil
.
jsonPost
(
shensiUrl
,
jackson
.
writeValueAsString
(
hisenseLightStatusPojos
));
}
catch
(
Exception
e
)
{
log
.
error
(
"海信灯态推送
百度失败:{}"
,
e
);
log
.
error
(
"海信灯态推送
神思失败:{}"
,
e
.
getMessage
()
);
}
try
{
OkHttpClientUtil
.
jsonPost
(
baiduUrl
,
jackson
.
writeValueAsString
(
hisenseLightStatusPojos
));
}
catch
(
Exception
e
)
{
log
.
error
(
"海信灯态推送百度失败:{}"
,
e
);
log
.
error
(
"海信灯态推送百度失败:{}"
,
e
.
getMessage
()
);
}
}
...
...
signal-utc-hisense-service/src/main/java/net/wanji/utc/hisense/util/OkHttpClientUtil.java
View file @
c6c0433d
...
...
@@ -65,7 +65,7 @@ public class OkHttpClientUtil {
return
responseString
;
}
}
catch
(
Exception
e
)
{
log
.
error
(
"OkHttpClientUtil远程服务url:{}, 调用异常:{}"
,
url
,
e
);
log
.
error
(
"OkHttpClientUtil远程服务url:{}, 调用异常:{}"
,
url
,
e
.
getMessage
()
);
throw
new
Exception
();
}
return
null
;
...
...
signal-utc-hisense-service/src/main/resources/logback-spring.xml
View file @
c6c0433d
...
...
@@ -43,8 +43,8 @@
<rollingPolicy
class=
"ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"
>
<!--路径-->
<fileNamePattern>
${LOG_PATH}/hisense/%d{yyyy-MM-dd}/info.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<MaxHistory>
30
</MaxHistory>
<totalSizeCap
>
1
0GB
</totalSizeCap >
<MaxHistory>
15
</MaxHistory>
<totalSizeCap
>
5
0GB
</totalSizeCap >
<maxFileSize>
200MB
</maxFileSize>
</rollingPolicy>
</appender>
...
...
@@ -62,8 +62,8 @@
<rollingPolicy
class=
"ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"
>
<!--路径-->
<fileNamePattern>
${LOG_PATH}/hisense/%d{yyyy-MM-dd}/error.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<MaxHistory>
30
</MaxHistory>
<totalSizeCap
>
1
0GB
</totalSizeCap >
<MaxHistory>
15
</MaxHistory>
<totalSizeCap
>
5
0GB
</totalSizeCap >
<maxFileSize>
200MB
</maxFileSize>
</rollingPolicy>
</appender>
...
...
signal-utc-service/src/main/java/net/wanji/utc/service/control/impl/ControlCommandStrategyServiceImpl.java
View file @
c6c0433d
package
net
.
wanji
.
utc
.
service
.
control
.
impl
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.framework.rest.JsonViewObject
;
import
net.wanji.common.utils.tool.IpAddressUtil
;
import
net.wanji.common.utils.tool.LocalDateTimeUtil
;
import
net.wanji.databus.dao.entity.*
;
import
net.wanji.databus.dao.mapper.*
;
import
net.wanji.databus.dto.ExtendPhaseDTO
;
...
...
@@ -19,20 +24,22 @@ import net.wanji.utc.common.typeenum.DateStyle;
import
net.wanji.utc.po.hk.request.DelBaseConfigPO
;
import
net.wanji.utc.service.control.ControlCommandService
;
import
net.wanji.utc.service.control.ControlCommandStrategyService
;
import
net.wanji.utc.task.SignalStatusTask
;
import
net.wanji.utc.util.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
import
java.lang.reflect.Field
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.*
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
* @author duanruiming
...
...
@@ -57,6 +64,7 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy
private
final
CrossInfoCache
crossInfoCache
;
private
final
CrossLightsMapper
crossLightsMapper
;
private
final
CrossPhaseLightsMapper
crossPhaseLightsMapper
;
private
final
SignalCommandLogPOMapper
signalCommandLogPOMapper
;
private
final
CrossPhaseDirTurnCache
crossPhaseDirTurnCache
;
private
final
CrossSchemePhaseTimeCountCache
crossSchemePhaseTimeCountCache
;
...
...
@@ -230,28 +238,89 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy
@Override
public
JsonViewObject
lockControlStrategy
(
ControlCommandVO
commandVO
)
throws
Exception
{
String
now
=
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
);
JsonViewObject
jsonViewObject
;
try
{
String
manufacturerIdCode
=
crossInfoCache
.
getManufacturerCodeByCrossId
(
commandVO
.
getCrossCode
());
if
(
StringUtils
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
(),
manufacturerIdCode
))
{
jsonViewObject
=
hkControlCommandService
.
lockControl
(
commandVO
);
}
else
{
jsonViewObject
=
wanJiControlCommandService
.
lockControl
(
commandVO
);
}
}
catch
(
Exception
e
)
{
jsonViewObject
=
JsonViewObject
.
newInstance
().
fail
(
e
.
getMessage
());
}
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
JSON
.
toJSONString
(
commandVO
));
jsonObject
.
put
(
"crossId"
,
commandVO
.
getCrossCode
());
//插入命令操作日志
insertCommandLog
(
now
,
jsonViewObject
,
jsonObject
,
3
);
return
jsonViewObject
;
}
@Override
public
JsonViewObject
stepControlStrategy
(
String
crossId
,
Integer
command
,
Integer
stepNum
)
throws
Exception
{
String
now
=
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
);
JsonViewObject
jsonViewObject
;
try
{
String
manufacturerIdCode
=
crossInfoCache
.
getManufacturerCodeByCrossId
(
crossId
);
if
(
StringUtils
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
(),
manufacturerIdCode
))
{
jsonViewObject
=
hkControlCommandService
.
stepControl
(
crossId
,
command
,
stepNum
);
}
else
{
jsonViewObject
=
wanJiControlCommandService
.
stepControl
(
crossId
,
command
,
stepNum
);
}
}
catch
(
Exception
e
)
{
jsonViewObject
=
JsonViewObject
.
newInstance
().
fail
(
e
.
getMessage
());
}
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"crossId"
,
crossId
);
jsonObject
.
put
(
"command"
,
command
);
jsonObject
.
put
(
"stepNum"
,
stepNum
);
//插入命令操作日志
insertCommandLog
(
now
,
jsonViewObject
,
jsonObject
,
1
);
return
jsonViewObject
;
}
/**
* @Description 插入命令日志
* @Param nowTime 请求时间戳
* @Param jsonViewObject 操作结果
* @Param jsonObject 参数
* @return void
**/
public
void
insertCommandLog
(
String
queryTime
,
JsonViewObject
jsonViewObject
,
JSONObject
jsonObject
,
int
commandType
){
SignalCommandLogPO
signalCommandLogPO
=
new
SignalCommandLogPO
();
signalCommandLogPO
.
setCrossId
(
jsonObject
.
getString
(
"crossId"
));
signalCommandLogPO
.
setDataInfo
(
jsonObject
.
toJSONString
());
signalCommandLogPO
.
setCommandType
(
commandType
);
signalCommandLogPO
.
setQueryTime
(
queryTime
);
Integer
code
=
jsonViewObject
.
getCode
();
HttpServletRequest
request
=
((
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
()).
getRequest
();
String
ip
=
IpAddressUtil
.
getIpAddress
(
request
);
signalCommandLogPO
.
setIp
(
ip
);
if
(
code
==
200
){
signalCommandLogPO
.
setCommandResult
(
1
);
}
else
{
signalCommandLogPO
.
setCommandResult
(
2
);
}
signalCommandLogPO
.
setResultMessage
(
jsonViewObject
.
getMessage
());
ConcurrentHashMap
<
String
,
List
<
LightsStatusVO2
>>
produceListMap
=
SignalStatusTask
.
produceListMap
;
if
(!
produceListMap
.
isEmpty
())
{
List
<
LightsStatusVO2
>
list
=
produceListMap
.
get
(
jsonObject
.
get
(
"crossId"
));
if
(
ObjectUtil
.
isNotEmpty
(
list
)){
LightsStatusVO2
lightsStatusVO2
=
list
.
get
(
0
);
String
runMode
=
lightsStatusVO2
.
getRunMode
();
String
lampTime
=
lightsStatusVO2
.
getTimeStamp
();
//时间转换
lampTime
=
LocalDateTimeUtil
.
formatTimeStamp
(
Long
.
valueOf
(
lampTime
),
LocalDateTimeUtil
.
TIMEFORMATTER
);
signalCommandLogPO
.
setRunMode
(
runMode
);
signalCommandLogPO
.
setLampTime
(
lampTime
);
}
}
signalCommandLogPOMapper
.
insert
(
signalCommandLogPO
);
}
@Override
public
JsonViewObject
setSignalControlStrategy
(
String
crossId
,
Integer
command
,
Integer
commandType
)
throws
Exception
{
JsonViewObject
jsonViewObject
;
...
...
@@ -266,6 +335,7 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy
@Override
public
JsonViewObject
recoverScheduleStrategy
(
String
crossId
)
throws
Exception
{
String
now
=
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
);
JsonViewObject
jsonViewObject
=
JsonViewObject
.
newInstance
();
if
(
StringUtils
.
isBlank
(
crossId
))
{
return
jsonViewObject
.
fail
(
"路口编号不能为空"
);
...
...
@@ -276,6 +346,10 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy
}
else
{
jsonViewObject
=
wanJiControlCommandService
.
recoverSchedule
(
crossId
);
}
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"crossId"
,
crossId
);
//插入命令操作日志
insertCommandLog
(
now
,
jsonViewObject
,
jsonObject
,
2
);
return
jsonViewObject
;
}
...
...
@@ -358,12 +432,20 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy
@Override
public
JsonViewObject
tempSchemeDetail
(
TempSchemeSendVO
tempSchemeSendVO
)
throws
Exception
{
String
manufacturerCode
=
crossInfoCache
.
getManufacturerCodeByCrossId
(
tempSchemeSendVO
.
getCrossId
()
);
String
now
=
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
);
JsonViewObject
jsonViewObject
=
JsonViewObject
.
newInstance
();
try
{
String
manufacturerCode
=
crossInfoCache
.
getManufacturerCodeByCrossId
(
tempSchemeSendVO
.
getCrossId
());
if
(
StringUtils
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
(),
manufacturerCode
))
{
}
else
{
jsonViewObject
=
wanJiControlCommandService
.
tempSchemeDetail
(
tempSchemeSendVO
);
}
}
catch
(
Exception
e
)
{
jsonViewObject
=
JsonViewObject
.
newInstance
().
fail
(
e
.
getMessage
());
}
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
JSON
.
toJSONString
(
tempSchemeSendVO
));
//插入命令操作日志
insertCommandLog
(
now
,
jsonViewObject
,
jsonObject
,
4
);
return
jsonViewObject
;
}
...
...
signal-utc-service/src/main/java/net/wanji/utc/service/control/impl/WanJiControlCommandServiceImpl.java
View file @
c6c0433d
This diff is collapsed.
Click to expand it.
signal-utc-service/src/main/java/net/wanji/utc/service/staticinfo/impl/WanJiCommonStaticInfoServiceImpl.java
View file @
c6c0433d
package
net
.
wanji
.
utc
.
service
.
staticinfo
.
impl
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.fasterxml.jackson.core.type.TypeReference
;
...
...
@@ -9,6 +10,7 @@ import lombok.RequiredArgsConstructor;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.framework.rest.JsonViewObject
;
import
net.wanji.common.utils.tool.JacksonUtils
;
import
net.wanji.common.utils.tool.LocalDateTimeUtil
;
import
net.wanji.common.utils.tool.StringUtils
;
import
net.wanji.databus.dao.entity.*
;
import
net.wanji.databus.dao.mapper.*
;
...
...
@@ -24,6 +26,7 @@ import net.wanji.feign.service.common.FeignCommon;
import
net.wanji.utc.cache.CrossInfoCache
;
import
net.wanji.utc.cache.UtcFeignClientCache
;
import
net.wanji.utc.common.Result
;
import
net.wanji.utc.service.control.impl.ControlCommandStrategyServiceImpl
;
import
net.wanji.utc.service.staticinfo.WanJiCommonStaticInfoService
;
import
net.wanji.utc.util.HttpRestUtil
;
import
org.springframework.beans.factory.annotation.Value
;
...
...
@@ -59,6 +62,7 @@ public class WanJiCommonStaticInfoServiceImpl implements WanJiCommonStaticInfoSe
private
final
UtcFeignClientCache
utcFeignClientCache
;
private
final
BaseCrossSchemeMapper
baseCrossSchemeMapper
;
private
final
CrossSchemeStageOptLogMapper
crossSchemeStageOptLogMapper
;
private
final
ControlCommandStrategyServiceImpl
controlCommandStrategyService
;
@Override
...
...
@@ -209,23 +213,32 @@ public class WanJiCommonStaticInfoServiceImpl implements WanJiCommonStaticInfoSe
@Override
public
JsonViewObject
crossSchemeRings
(
CrossSchemeRingsDTO
crossSchemeRingsDTO
)
throws
Exception
{
String
now
=
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
);
String
manufacturerIdCode
=
crossInfoCache
.
getManufacturerCodeByCrossId
(
crossSchemeRingsDTO
.
getCrossId
());
JsonViewObject
jsonViewObject
=
null
;
String
crossId
=
crossSchemeRingsDTO
.
getCrossId
();
if
(
"HISENSE"
.
equals
(
manufacturerIdCode
))
{
FeignCommon
utcFeignClientService
=
utcFeignClientCache
.
getUtcFeignClientService
(
manufacturerIdCode
);
jsonViewObject
=
utcFeignClientService
.
crossSchemeRings
(
crossSchemeRingsDTO
);
log
.
info
(
"方案环图请求,crossId:{},result:{}"
,
crossId
,
jsonViewObject
);
Integer
code
=
jsonViewObject
.
getCode
();
if
(
code
!=
200
){
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
JSON
.
toJSONString
(
crossSchemeRingsDTO
));
//插入命令操作日志
controlCommandStrategyService
.
insertCommandLog
(
now
,
jsonViewObject
,
jsonObject
,
10
);
}
}
else
{
CrossSchemeRings
crossSchemeRings
=
getCrossSchemeRings
(
crossSchemeRingsDTO
);
if
(
ObjectUtil
.
isNotEmpty
(
crossSchemeRings
))
{
jsonViewObject
=
JsonViewObject
.
newInstance
().
success
(
crossSchemeRings
);
}
else
{
jsonViewObject
=
JsonViewObject
.
newInstance
().
fail
();
jsonViewObject
=
JsonViewObject
.
newInstance
().
fail
(
"该方案信息未同步"
);
}
}
if
(
Objects
.
isNull
(
jsonViewObject
)
||
jsonViewObject
.
getCode
()
!=
200
)
{
/*
if (Objects.isNull(jsonViewObject) || jsonViewObject.getCode() != 200) {
throw new Exception("方案环图请求远程服务调用异常,异常信息" + jsonViewObject.getMessage());
}
}
*/
return
jsonViewObject
;
}
...
...
signal-utc-service/src/main/java/net/wanji/utc/task/SignalStatusTask.java
View file @
c6c0433d
...
...
@@ -84,7 +84,7 @@ public class SignalStatusTask {
@Autowired
private
EHualuFeignClients
eHualuFeignClients
;
p
rivate
static
final
ConcurrentHashMap
<
String
,
List
<
LightsStatusVO2
>>
produceListMap
=
new
ConcurrentHashMap
<>();
p
ublic
static
final
ConcurrentHashMap
<
String
,
List
<
LightsStatusVO2
>>
produceListMap
=
new
ConcurrentHashMap
<>();
// 运行状态、告警,1分钟一次
@Scheduled
(
fixedRate
=
60
*
1000
)
...
...
wj-databus/src/main/java/net/wanji/databus/dao/entity/GreenwaveRealtimePO.java
View file @
c6c0433d
...
...
@@ -18,7 +18,7 @@ public class GreenwaveRealtimePO {
/** 绿波ID */
@ApiModelProperty
(
name
=
"id"
,
notes
=
""
)
@TableId
private
Integer
id
;
private
Long
id
;
@ApiModelProperty
(
name
=
"绿波ID"
,
notes
=
""
)
private
Integer
greenId
;
/** 交通状态:1畅通;2缓行;3拥堵;4严重拥堵;5未知 */
...
...
wj-databus/src/main/java/net/wanji/databus/dao/entity/SignalCommandLogPO.java
0 → 100644
View file @
c6c0433d
package
net
.
wanji
.
databus
.
dao
.
entity
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.sql.Date
;
/**
* @ClassName CrossSchemeOptLog
* @Description 命令操作日志
* @Author zhouleilei
* @Date 2024/12/23 15:23
*/
@Data
@TableName
(
"t_signal_command_log"
)
public
class
SignalCommandLogPO
{
@ApiModelProperty
(
value
=
"路口编号"
)
private
String
crossId
;
@ApiModelProperty
(
value
=
"请求信息"
)
private
String
dataInfo
;
@ApiModelProperty
(
value
=
"控制类型:1-步进控制/恢复(信控系统);2-恢复时间表(公用);3-相位锁定/解锁(公用);4-临时方案下发(公用);5-步进相位(神思);10-查询环图失败记录"
)
private
Integer
commandType
;
@ApiModelProperty
(
value
=
"优化结果:1-成功 2-失败"
)
private
Integer
commandResult
;
@ApiModelProperty
(
value
=
"返回信息"
)
private
String
resultMessage
;
@ApiModelProperty
(
value
=
"运行模式 `2=手动锁定当前相位`,`3=手动全红`,`4=手动黄闪`,`5=手动关灯`,`6=全红闪控制`,`7=全黄控制`,`8=正常按计划运行`,`9=手动步进控制`,`10=自动步进控制`,`11=恢复时间表`,`255=临时控制方案`"
)
private
String
runMode
;
@ApiModelProperty
(
value
=
"调用IP"
)
private
String
ip
;
@ApiModelProperty
(
value
=
"请求时间"
)
private
String
queryTime
;
@ApiModelProperty
(
value
=
"灯态时间"
)
private
String
lampTime
;
@ApiModelProperty
(
value
=
"数据插入时间"
)
private
Date
insertTime
;
}
wj-databus/src/main/java/net/wanji/databus/dao/mapper/CrossDirDataHistMapper.java
View file @
c6c0433d
...
...
@@ -53,6 +53,7 @@ public interface CrossDirDataHistMapper extends BaseMapper<CrossDirDataHistPO> {
List
<
CrossDirDataHistPO
>
selectByCrossIdsDirsAndTimestamp
(
List
<
String
>
crossIdList
,
List
<
Integer
>
dirCodeList
,
int
startTimeStamp
,
int
endTimeStamp
);
List
<
CrossDirDataHistPO
>
selectByCrossIdDirsAndTimestamp
(
String
crossId
,
List
<
Integer
>
dirCodeList
,
int
startTimeStamp
,
int
endTimeStamp
);
List
<
CrossDirDataHistPO
>
selectDirDataList
(
String
crossId
,
List
<
Integer
>
dirCodeList
,
int
startTimeStamp
,
int
endTimeStamp
);
List
<
CrossDirDataHistPO
>
selectByCrossDirAndTimeSection
(
@Param
(
"crossId"
)
String
crossId
,
...
...
wj-databus/src/main/java/net/wanji/databus/dao/mapper/SignalCommandLogPOMapper.java
0 → 100644
View file @
c6c0433d
package
net
.
wanji
.
databus
.
dao
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
net.wanji.databus.dao.entity.SignalCommandLogPO
;
/**
* @ClassName SignalCommandLogPOMapper
* @Description SignalCommandLogPOMapper
* @Author zhouleilei
* @Date 2024/12/23 15:23
*/
public
interface
SignalCommandLogPOMapper
extends
BaseMapper
<
SignalCommandLogPO
>
{
}
wj-databus/src/main/java/net/wanji/databus/vo/LightsStatusVO.java
View file @
c6c0433d
...
...
@@ -16,7 +16,8 @@ import java.util.Map;
@ApiModel
(
value
=
"LightsStatusVO"
,
description
=
"实时灯态信息实体"
)
public
class
LightsStatusVO
extends
BaseCrossInfo
{
@ApiModelProperty
(
value
=
"运行模式 `2=手动锁定当前相位`,`3=手动全红`,`4=手动黄闪`,`5=手动关灯`,"
+
"`6=全红闪控制`,`7=全黄控制`,`8=正常按计划运行`,`9=手动步进控制`,`10=自动步进控制`,`11=恢复时间表`,`255=临时控制方案`"
)
"`6=全红闪控制`,`7=全黄控制`,`8=正常按计划运行`,`9=手动步进控制`,`10=自动步进控制`,`11=恢复时间表`,"
+
"`20=单点自适应控制`,`21=绿波协调`,`31=手动控制`,`255=临时控制方案`"
)
private
String
runMode
;
@ApiModelProperty
(
value
=
"控制模式"
)
private
String
controlMode
;
...
...
wj-databus/src/main/java/net/wanji/databus/vo/LightsStatusVO2.java
View file @
c6c0433d
...
...
@@ -18,7 +18,8 @@ import java.util.List;
@ApiModel
(
value
=
"LightsStatusVO2"
,
description
=
"实时灯态信息实体版本2"
)
public
class
LightsStatusVO2
extends
BaseCrossInfo
{
@ApiModelProperty
(
value
=
"运行模式 `2=手动锁定当前相位`,`3=手动全红`,`4=手动黄闪`,`5=手动关灯`,"
+
"`6=全红闪控制`,`7=全黄控制`,`8=正常按计划运行`,`9=手动步进控制`,`10=自动步进控制`,`11=恢复时间表`,`255=临时控制方案`"
)
"`6=全红闪控制`,`7=全黄控制`,`8=正常按计划运行`,`9=手动步进控制`,`10=自动步进控制`,`11=恢复时间表`,"
+
"`20=单点自适应控制`,`21=绿波协调`,`31=手动控制`,`255=临时控制方案`"
)
private
String
runMode
;
@ApiModelProperty
(
value
=
"控制模式"
)
private
String
controlMode
;
...
...
wj-databus/src/main/resources/mapper/BaseCrossSchemeMapper.xml
View file @
c6c0433d
...
...
@@ -241,7 +241,7 @@
AND schedules.`week` = #{week}
AND DATE_FORMAT( NOW(), '%H:%i' ) BETWEEN DATE_FORMAT( CAST( section.start_time AS TIME ), '%H:%i' )
AND DATE_FORMAT( CAST( section.end_time AS TIME ), '%H:%i' )
ORDER BY DATE_FORMAT( CAST( section.end_time AS TIME ), '%H:%i' )
A
SC LIMIT 1
ORDER BY DATE_FORMAT( CAST( section.end_time AS TIME ), '%H:%i' )
DE
SC LIMIT 1
</select>
<select
id=
"selectSchemeByParams"
resultType=
"net.wanji.databus.dao.entity.BaseCrossSchemePO"
>
...
...
@@ -258,7 +258,7 @@
AND schedules.`week` = #{week}
AND DATE_FORMAT( #{queryTime}, '%H:%i' ) BETWEEN DATE_FORMAT( CAST( section.start_time AS TIME ), '%H:%i' )
AND DATE_FORMAT( CAST( section.end_time AS TIME ), '%H:%i' )
ORDER BY DATE_FORMAT( CAST( section.end_time AS TIME ), '%H:%i' )
A
SC LIMIT 1
ORDER BY DATE_FORMAT( CAST( section.end_time AS TIME ), '%H:%i' )
DE
SC LIMIT 1
</select>
...
...
wj-databus/src/main/resources/mapper/CrossDirDataHistMapper.xml
View file @
c6c0433d
This diff is collapsed.
Click to expand it.
wj-databus/src/main/resources/mapper/GreenwaveHistMapper.xml
View file @
c6c0433d
...
...
@@ -88,10 +88,13 @@
<insert
id=
"insertBatch"
parameterType=
"net.wanji.databus.dao.entity.GreenwaveHistPO"
>
insert into t_greenwave_hist
(
<include
refid=
"Base_Column_List"
/>
)
(green_id, status,type,traffic_index,speed,trval_time,stop_times,queue_length,cong_rate,delay_time,nopark_pass_rate,
cord_reliability,cord_queue_ratio,uncoordinate_phase_queue, start_time, gmt_create,gmt_modified,
strategy, strategy_duration, optimize_count, optimize_seconds,
green_wave_width, direction, plan_cycle, speed_high, speed_down, road_direction, sturation, batch_time)
values
<foreach
collection=
"list"
item=
"entity"
separator=
","
>
(#{entity.
id}, #{entity.
greenId}, #{entity.status}, #{entity.type}, #{entity.trafficIndex},#{entity.speed},
(#{entity.greenId}, #{entity.status}, #{entity.type}, #{entity.trafficIndex},#{entity.speed},
#{entity.trvalTime}, #{entity.stopTimes}, #{entity.queueLength}, #{entity.congRate},
#{entity.delayTime}, #{entity.noparkPassRate}, #{entity.cordReliability}, #{entity.cordQueueRatio},
#{entity.uncoordinatePhaseQueue}, #{entity.startTime}, #{entity.gmtCreate}, #{entity.gmtModified},
...
...
@@ -100,6 +103,8 @@
#{entity.speedDown}, #{entity.roadDirection}, #{entity.sturation}, #{entity.batchTime}
)
</foreach>
ON DUPLICATE KEY UPDATE
gmt_modified = values(gmt_modified)
</insert>
</mapper>
wj-databus/src/main/resources/mapper/GreenwaveRealtimeMapper.xml
View file @
c6c0433d
...
...
@@ -54,10 +54,13 @@
<insert
id=
"insertBatch"
parameterType=
"net.wanji.databus.dao.entity.GreenwaveRealtimePO"
>
insert into t_greenwave_realtime
(
<include
refid=
"Base_Column_List"
></include>
)
(green_id, status,type,traffic_index,speed,trval_time,stop_times,queue_length,cong_rate,delay_time,nopark_pass_rate,
cord_reliability, cord_queue_ratio, uncoordinate_phase_queue, start_time, gmt_create,gmt_modified,
strategy, strategy_duration, optimize_count, optimize_seconds,
green_wave_width, direction, plan_cycle, speed_high, speed_down, road_direction, sturation, batch_time)
values
<foreach
collection=
"list"
item=
"entity"
separator=
","
>
(#{entity.
id}, #{entity.
greenId}, #{entity.status}, #{entity.type}, #{entity.trafficIndex}, #{entity.speed},
(#{entity.greenId}, #{entity.status}, #{entity.type}, #{entity.trafficIndex}, #{entity.speed},
#{entity.trvalTime}, #{entity.stopTimes}, #{entity.queueLength}, #{entity.congRate},
#{entity.delayTime}, #{entity.noparkPassRate}, #{entity.cordReliability}, #{entity.cordQueueRatio},
#{entity.uncoordinatePhaseQueue}, #{entity.startTime}, #{entity.gmtCreate}, #{entity.gmtModified},
...
...
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