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
c3340a83
Commit
c3340a83
authored
May 16, 2024
by
duanruiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[update] 济南测试平台-转向数据
parent
666fadc9
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
141 additions
and
1 deletion
+141
-1
TrendController.java
...c/main/java/net/wanji/opt/controller/TrendController.java
+13
-0
AnalysisRidTurnIndicatorsMapper.java
...opt/dao/mapper/trend/AnalysisRidTurnIndicatorsMapper.java
+15
-0
AnalysisRidTurnIndicators.java
...ava/net/wanji/opt/po/trend/AnalysisRidTurnIndicators.java
+86
-0
TrendService.java
...ice/src/main/java/net/wanji/opt/service/TrendService.java
+3
-0
TrendServiceImpl.java
...ain/java/net/wanji/opt/service/impl/TrendServiceImpl.java
+18
-1
TableQueryVO.java
...-service/src/main/java/net/wanji/opt/vo/TableQueryVO.java
+2
-0
AnalysisRidTurnIndicatorsMapper.xml
...esources/mapper/trend/AnalysisRidTurnIndicatorsMapper.xml
+4
-0
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/controller/TrendController.java
View file @
c3340a83
...
@@ -11,6 +11,7 @@ import net.wanji.opt.bo.*;
...
@@ -11,6 +11,7 @@ import net.wanji.opt.bo.*;
import
net.wanji.opt.dto.trend.AbnormalCrossListDTO
;
import
net.wanji.opt.dto.trend.AbnormalCrossListDTO
;
import
net.wanji.opt.dto.trend.EventAlarmDTO
;
import
net.wanji.opt.dto.trend.EventAlarmDTO
;
import
net.wanji.opt.dto.trend.GreenwaveListDTO
;
import
net.wanji.opt.dto.trend.GreenwaveListDTO
;
import
net.wanji.opt.po.trend.AnalysisRidTurnIndicators
;
import
net.wanji.opt.service.impl.TrendServiceImpl
;
import
net.wanji.opt.service.impl.TrendServiceImpl
;
import
net.wanji.opt.vo.*
;
import
net.wanji.opt.vo.*
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
...
@@ -300,4 +301,16 @@ public class TrendController {
...
@@ -300,4 +301,16 @@ public class TrendController {
List
<
TableQueryVO
.
RealTimeDataElement
>
result
=
trendService
.
laneSnapshotIndex
(
crossIdDateTimeVO
);
List
<
TableQueryVO
.
RealTimeDataElement
>
result
=
trendService
.
laneSnapshotIndex
(
crossIdDateTimeVO
);
return
JsonViewObject
.
newInstance
().
success
(
result
);
return
JsonViewObject
.
newInstance
().
success
(
result
);
}
}
@ApiOperation
(
value
=
"车道周期转向数据"
,
notes
=
"车道周期转向数据"
,
response
=
JsonViewObject
.
class
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@PostMapping
(
value
=
"/lanePeriodTurnData"
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
List
.
class
),
})
public
JsonViewObject
lanePeriodTurnData
(
@RequestBody
CommonCrossIdDateTimeVO
crossIdDateTimeVO
)
throws
Exception
{
List
<
AnalysisRidTurnIndicators
>
result
=
trendService
.
lanePeriodTurnData
(
crossIdDateTimeVO
);
return
JsonViewObject
.
newInstance
().
success
(
result
);
}
}
}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/dao/mapper/trend/AnalysisRidTurnIndicatorsMapper.java
0 → 100644
View file @
c3340a83
package
net
.
wanji
.
opt
.
dao
.
mapper
.
trend
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
net.wanji.opt.po.trend.AnalysisRidTurnIndicators
;
import
org.springframework.stereotype.Repository
;
/**
* @author duanruiming
* @date 2024/05/16 17:10
*/
@Repository
@DS
(
"holo"
)
public
interface
AnalysisRidTurnIndicatorsMapper
extends
BaseMapper
<
AnalysisRidTurnIndicators
>
{
}
signal-optimize-service/src/main/java/net/wanji/opt/po/trend/AnalysisRidTurnIndicators.java
0 → 100644
View file @
c3340a83
package
net
.
wanji
.
opt
.
po
.
trend
;
import
com.alibaba.fastjson.annotation.JSONField
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.util.Date
;
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
@TableName
(
"t_analysis_rid_turn_indicators"
)
@ApiModel
(
value
=
"AnalysisRidTurnIndicators"
,
description
=
""
)
public
class
AnalysisRidTurnIndicators
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"主键"
,
hidden
=
true
)
private
Integer
oid
;
@ApiModelProperty
(
value
=
"路口id"
)
private
String
crossId
;
@ApiModelProperty
(
name
=
"fRid"
,
value
=
"进口rid"
)
@JsonProperty
(
"fRid"
)
private
String
fRid
;
@ApiModelProperty
(
name
=
"fRidDir"
,
value
=
"进口道方向 1北;2东北;3东;4东南;5南;6西南;7西;8西北"
)
@JsonProperty
(
"fRidDir"
)
private
Integer
fRidDir
;
@ApiModelProperty
(
value
=
"出口rid"
,
hidden
=
true
)
@JsonProperty
(
"tRid"
)
private
String
tRid
;
@ApiModelProperty
(
value
=
"转向类型 根据进入、出口路段转向计算 1 左转 2 直行3右转 4 掉头"
)
private
Integer
turnDirNo
;
@ApiModelProperty
(
value
=
"交通流量"
)
private
Integer
flow
;
@ApiModelProperty
(
value
=
"平均速度"
)
private
BigDecimal
speed
;
@ApiModelProperty
(
value
=
"排队长度"
)
private
Integer
queueLength
;
@ApiModelProperty
(
value
=
"绿灯有效利用率"
)
private
BigDecimal
greenUsageRate
;
@ApiModelProperty
(
value
=
"平均停车次数"
)
private
BigDecimal
stopNum
;
@ApiModelProperty
(
value
=
"一次停车率"
)
private
BigDecimal
onceStopRate
;
@ApiModelProperty
(
value
=
"二次停车率"
)
private
BigDecimal
secondStopRate
;
@ApiModelProperty
(
value
=
"三次停车率"
)
private
BigDecimal
threeStopRate
;
@ApiModelProperty
(
value
=
"不停车通过率"
)
private
BigDecimal
noStopRate
;
@ApiModelProperty
(
value
=
"交通状态"
)
private
String
trafficState
;
@ApiModelProperty
(
value
=
"分析粒度【5m:五分钟 10m:10分钟 30m:30分钟 1h:一小时】"
,
hidden
=
true
)
private
String
granularity
;
@JSONField
(
format
=
"yyyy-MM-dd HH:mm:ss.SSS"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss.SSS"
,
timezone
=
"GMT+8"
)
private
Date
windowStartTime
;
@JSONField
(
format
=
"yyyy-MM-dd HH:mm:ss.SSS"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss.SSS"
,
timezone
=
"GMT+8"
)
private
Date
windowEndTime
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss.SSS"
,
timezone
=
"GMT+8"
)
private
Date
ruksj
;
}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/service/TrendService.java
View file @
c3340a83
...
@@ -5,6 +5,7 @@ import net.wanji.databus.vo.GreenwaveListVO;
...
@@ -5,6 +5,7 @@ import net.wanji.databus.vo.GreenwaveListVO;
import
net.wanji.opt.bo.*
;
import
net.wanji.opt.bo.*
;
import
net.wanji.opt.dto.trend.AbnormalCrossListDTO
;
import
net.wanji.opt.dto.trend.AbnormalCrossListDTO
;
import
net.wanji.opt.dto.trend.GreenwaveListDTO
;
import
net.wanji.opt.dto.trend.GreenwaveListDTO
;
import
net.wanji.opt.po.trend.AnalysisRidTurnIndicators
;
import
net.wanji.opt.vo.*
;
import
net.wanji.opt.vo.*
;
import
java.text.ParseException
;
import
java.text.ParseException
;
...
@@ -60,4 +61,6 @@ public interface TrendService {
...
@@ -60,4 +61,6 @@ public interface TrendService {
List
<
TableQueryVO
.
CycleDataElement
>
laneTrafficIndex
(
CommonCrossIdDateTimeVO
crossIdDateTimeVO
)
throws
Exception
;
List
<
TableQueryVO
.
CycleDataElement
>
laneTrafficIndex
(
CommonCrossIdDateTimeVO
crossIdDateTimeVO
)
throws
Exception
;
List
<
TableQueryVO
.
RealTimeDataElement
>
laneSnapshotIndex
(
CommonCrossIdDateTimeVO
crossIdDateTimeVO
)
throws
Exception
;
List
<
TableQueryVO
.
RealTimeDataElement
>
laneSnapshotIndex
(
CommonCrossIdDateTimeVO
crossIdDateTimeVO
)
throws
Exception
;
List
<
AnalysisRidTurnIndicators
>
lanePeriodTurnData
(
CommonCrossIdDateTimeVO
crossIdDateTimeVO
)
throws
Exception
;
}
}
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/TrendServiceImpl.java
View file @
c3340a83
...
@@ -23,6 +23,7 @@ import net.wanji.opt.dao.mapper.strategy.SceneMapper;
...
@@ -23,6 +23,7 @@ import net.wanji.opt.dao.mapper.strategy.SceneMapper;
import
net.wanji.opt.dao.mapper.strategy.SceneStrategyIdeaMapper
;
import
net.wanji.opt.dao.mapper.strategy.SceneStrategyIdeaMapper
;
import
net.wanji.opt.dao.mapper.strategy.SceneStrategyMapper
;
import
net.wanji.opt.dao.mapper.strategy.SceneStrategyMapper
;
import
net.wanji.opt.dao.mapper.strategy.StrategyMapper
;
import
net.wanji.opt.dao.mapper.strategy.StrategyMapper
;
import
net.wanji.opt.dao.mapper.trend.AnalysisRidTurnIndicatorsMapper
;
import
net.wanji.opt.dao.mapper.trend.EventAlarmMapper
;
import
net.wanji.opt.dao.mapper.trend.EventAlarmMapper
;
import
net.wanji.opt.dto.CrossLaneSnapshotDataDTO
;
import
net.wanji.opt.dto.CrossLaneSnapshotDataDTO
;
import
net.wanji.opt.dto.LineSchemeDTO
;
import
net.wanji.opt.dto.LineSchemeDTO
;
...
@@ -31,6 +32,7 @@ import net.wanji.opt.dto.trend.GreenwaveListDTO;
...
@@ -31,6 +32,7 @@ import net.wanji.opt.dto.trend.GreenwaveListDTO;
import
net.wanji.opt.po.base.CrossSchemeOptLogPO
;
import
net.wanji.opt.po.base.CrossSchemeOptLogPO
;
import
net.wanji.opt.po.strategy.ScenePO
;
import
net.wanji.opt.po.strategy.ScenePO
;
import
net.wanji.opt.po.strategy.StrategyPO
;
import
net.wanji.opt.po.strategy.StrategyPO
;
import
net.wanji.opt.po.trend.AnalysisRidTurnIndicators
;
import
net.wanji.opt.po.trend.EventAlarmPO
;
import
net.wanji.opt.po.trend.EventAlarmPO
;
import
net.wanji.opt.service.TrendService
;
import
net.wanji.opt.service.TrendService
;
import
net.wanji.opt.service.es.LaneSnapshotDataQueryService
;
import
net.wanji.opt.service.es.LaneSnapshotDataQueryService
;
...
@@ -95,6 +97,7 @@ public class TrendServiceImpl implements TrendService {
...
@@ -95,6 +97,7 @@ public class TrendServiceImpl implements TrendService {
private
final
DirectionMappingsConfig
directionMappingsConfig
;
private
final
DirectionMappingsConfig
directionMappingsConfig
;
private
final
CrossDataHistMapper
crossDataHistMapper
;
private
final
CrossDataHistMapper
crossDataHistMapper
;
private
final
RunningEvaluateServiceImpl
runningEvaluateService
;
private
final
RunningEvaluateServiceImpl
runningEvaluateService
;
private
final
AnalysisRidTurnIndicatorsMapper
ridTurnIndicatorsMapper
;
// 用于计算路口状态,key为方向,value为状态
// 用于计算路口状态,key为方向,value为状态
private
Map
<
Integer
,
Integer
>
preStatus
=
new
HashMap
<
Integer
,
Integer
>()
{{
private
Map
<
Integer
,
Integer
>
preStatus
=
new
HashMap
<
Integer
,
Integer
>()
{{
...
@@ -121,7 +124,8 @@ public class TrendServiceImpl implements TrendService {
...
@@ -121,7 +124,8 @@ public class TrendServiceImpl implements TrendService {
CrossDirDataHistMapper
crossDirDataHistMapper
,
EventAlarmMapper
eventAlarmMapper
,
CrossDirDataHistMapper
crossDirDataHistMapper
,
EventAlarmMapper
eventAlarmMapper
,
RidInfoMapper
ridInfoMapper
,
BaseCrossDirInfoMapper
baseCrossDirInfoMapper
,
RidInfoMapper
ridInfoMapper
,
BaseCrossDirInfoMapper
baseCrossDirInfoMapper
,
CrossSchemeOptLogMapper
crossSchemeOptLogMapper
,
GreenwaveCrossMapper
greenwaveCrossMapper
,
CrossDirDataRealtimeMapper
crossDirDataRealtimeMapper
,
GreenwaveHistMapper
greenwaveHistMapper
,
GreenwaveRealtimeMapper
greenwaveRealtimeMapper
,
SceneStrategyIdeaMapper
strategyIdeaMapper
,
StrategyMapper
strategyMapper
,
BaseCrossSchedulesMapper
baseCrossSchedulesMapper
,
BaseCrossSchedulesPlanMapper
baseCrossSchedulesPlanMapper
,
BaseCrossSectionMapper
baseCrossSectionMapper
,
BaseCrossSchemeMapper
crossSchemeMapper
,
BaseCrossSchemeMapper
baseCrossSchemeMapper
,
BaseCrossPhaseMapper
baseCrossPhaseMapper
,
BaseCrossPhaseLightsMapper
crossPhaseLightsMapper
,
BaseCrossLaneLightsMapper
baseCrossLaneLightsMapper
,
CrossBaseLaneInfoMapper
crossBaseLaneInfoMapper
,
CrossTurnDataHistMapper
crossTurnDataHistMapper
,
@Qualifier
(
"greenwaveSceneMapper"
)
GreenwaveSceneMapper
greenwaveSceneMapper
,
@Qualifier
(
"sceneStrategyMapper"
)
SceneStrategyMapper
sceneStrategyMapper
,
@Qualifier
(
"sceneMapper"
)
SceneMapper
sceneMapper
,
@Qualifier
(
"baseCrossPlanMapper"
)
BaseCrossPlanMapper
baseCrossPlanMapper
,
MainlineEvaluateServiceImpl
mainlineEvaluateServiceImpl
,
CrossLaneDataHistMapper
crossLaneDataHistMapper
,
LaneSnapshotDataQueryService
laneSnapshotDataQueryService
,
DirectionMappingsConfig
directionMappingsConfig
,
CrossSchemeOptLogMapper
crossSchemeOptLogMapper
,
GreenwaveCrossMapper
greenwaveCrossMapper
,
CrossDirDataRealtimeMapper
crossDirDataRealtimeMapper
,
GreenwaveHistMapper
greenwaveHistMapper
,
GreenwaveRealtimeMapper
greenwaveRealtimeMapper
,
SceneStrategyIdeaMapper
strategyIdeaMapper
,
StrategyMapper
strategyMapper
,
BaseCrossSchedulesMapper
baseCrossSchedulesMapper
,
BaseCrossSchedulesPlanMapper
baseCrossSchedulesPlanMapper
,
BaseCrossSectionMapper
baseCrossSectionMapper
,
BaseCrossSchemeMapper
crossSchemeMapper
,
BaseCrossSchemeMapper
baseCrossSchemeMapper
,
BaseCrossPhaseMapper
baseCrossPhaseMapper
,
BaseCrossPhaseLightsMapper
crossPhaseLightsMapper
,
BaseCrossLaneLightsMapper
baseCrossLaneLightsMapper
,
CrossBaseLaneInfoMapper
crossBaseLaneInfoMapper
,
CrossTurnDataHistMapper
crossTurnDataHistMapper
,
@Qualifier
(
"greenwaveSceneMapper"
)
GreenwaveSceneMapper
greenwaveSceneMapper
,
@Qualifier
(
"sceneStrategyMapper"
)
SceneStrategyMapper
sceneStrategyMapper
,
@Qualifier
(
"sceneMapper"
)
SceneMapper
sceneMapper
,
@Qualifier
(
"baseCrossPlanMapper"
)
BaseCrossPlanMapper
baseCrossPlanMapper
,
MainlineEvaluateServiceImpl
mainlineEvaluateServiceImpl
,
CrossLaneDataHistMapper
crossLaneDataHistMapper
,
LaneSnapshotDataQueryService
laneSnapshotDataQueryService
,
DirectionMappingsConfig
directionMappingsConfig
,
CrossDataHistMapper
crossDataHistMapper
,
RunningEvaluateServiceImpl
runningEvaluateService
)
{
CrossDataHistMapper
crossDataHistMapper
,
RunningEvaluateServiceImpl
runningEvaluateService
,
AnalysisRidTurnIndicatorsMapper
ridTurnIndicatorsMapper
)
{
this
.
greenwaveInfoMapper
=
greenwaveInfoMapper
;
this
.
greenwaveInfoMapper
=
greenwaveInfoMapper
;
this
.
baseCrossInfoMapper
=
baseCrossInfoMapper
;
this
.
baseCrossInfoMapper
=
baseCrossInfoMapper
;
this
.
crossDataRealtimeMapper
=
crossDataRealtimeMapper
;
this
.
crossDataRealtimeMapper
=
crossDataRealtimeMapper
;
...
@@ -155,6 +159,7 @@ public class TrendServiceImpl implements TrendService {
...
@@ -155,6 +159,7 @@ public class TrendServiceImpl implements TrendService {
this
.
directionMappingsConfig
=
directionMappingsConfig
;
this
.
directionMappingsConfig
=
directionMappingsConfig
;
this
.
crossDataHistMapper
=
crossDataHistMapper
;
this
.
crossDataHistMapper
=
crossDataHistMapper
;
this
.
runningEvaluateService
=
runningEvaluateService
;
this
.
runningEvaluateService
=
runningEvaluateService
;
this
.
ridTurnIndicatorsMapper
=
ridTurnIndicatorsMapper
;
}
}
@Override
@Override
...
@@ -1390,6 +1395,7 @@ public class TrendServiceImpl implements TrendService {
...
@@ -1390,6 +1395,7 @@ public class TrendServiceImpl implements TrendService {
vo
.
setV85
(
po
.
getV85
());
vo
.
setV85
(
po
.
getV85
());
vo
.
setPedFlow
(
pedFlow
);
vo
.
setPedFlow
(
pedFlow
);
vo
.
setAllFlow
(
pedFlow
+
pedFlow
+
po
.
getNonMotorFlow
());
vo
.
setAllFlow
(
pedFlow
+
pedFlow
+
po
.
getNonMotorFlow
());
vo
.
setAllVehiceleFlow
(
po
.
getFlow
()
+
po
.
getNonMotorFlow
());
Integer
turn
=
null
;
Integer
turn
=
null
;
for
(
CrossBaseLaneInfoPO
crossBaseLaneInfoPO
:
crossBaseLaneInfoPOS
)
{
for
(
CrossBaseLaneInfoPO
crossBaseLaneInfoPO
:
crossBaseLaneInfoPOS
)
{
...
@@ -1960,4 +1966,15 @@ public class TrendServiceImpl implements TrendService {
...
@@ -1960,4 +1966,15 @@ public class TrendServiceImpl implements TrendService {
laneSnapshotDataQueryService
.
queryByCrossIdAndTimeSpan
(
crossId
,
start
,
end
);
laneSnapshotDataQueryService
.
queryByCrossIdAndTimeSpan
(
crossId
,
start
,
end
);
return
buildRealTimeList
(
dtoList
);
return
buildRealTimeList
(
dtoList
);
}
}
@Override
public
List
<
AnalysisRidTurnIndicators
>
lanePeriodTurnData
(
CommonCrossIdDateTimeVO
crossIdDateTimeVO
)
throws
Exception
{
String
crossId
=
crossIdDateTimeVO
.
getCrossId
();
Date
start
=
crossIdDateTimeVO
.
getStart
();
Date
end
=
crossIdDateTimeVO
.
getEnd
();
LambdaQueryWrapper
<
AnalysisRidTurnIndicators
>
queryWrapper
=
new
LambdaQueryWrapper
<>();
queryWrapper
.
eq
(
AnalysisRidTurnIndicators:
:
getCrossId
,
crossId
);
queryWrapper
.
between
(
AnalysisRidTurnIndicators:
:
getRuksj
,
start
,
end
);
return
ridTurnIndicatorsMapper
.
selectList
(
queryWrapper
);
}
}
}
signal-optimize-service/src/main/java/net/wanji/opt/vo/TableQueryVO.java
View file @
c3340a83
...
@@ -100,5 +100,7 @@ public class TableQueryVO {
...
@@ -100,5 +100,7 @@ public class TableQueryVO {
private
int
pedFlow
;
private
int
pedFlow
;
@ApiModelProperty
(
value
=
"总流量"
)
@ApiModelProperty
(
value
=
"总流量"
)
private
int
allFlow
;
private
int
allFlow
;
@ApiModelProperty
(
value
=
"车辆总和"
)
private
int
allVehiceleFlow
;
}
}
}
}
signal-optimize-service/src/main/resources/mapper/trend/AnalysisRidTurnIndicatorsMapper.xml
0 → 100644
View file @
c3340a83
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"net.wanji.opt.dao.mapper.trend.AnalysisRidTurnIndicatorsMapper"
>
</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