Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
A
antai-sport-http-server
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
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
antai-sport
antai-sport-http-server
Commits
ea67eb85
Commit
ea67eb85
authored
Jun 07, 2022
by
liming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
团练接口
parent
3249b0c3
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
177 additions
and
8 deletions
+177
-8
TeamTrainingController.java
...iness/teamtraining/controller/TeamTrainingController.java
+13
-0
TeamTrainingConverter.java
...usiness/teamtraining/converter/TeamTrainingConverter.java
+4
-0
TeamTrainingPlayerRecordInitRequestDTO.java
...mtraining/dto/TeamTrainingPlayerRecordInitRequestDTO.java
+14
-0
TeamTrainingPlayerRecordInitResponseDTO.java
...training/dto/TeamTrainingPlayerRecordInitResponseDTO.java
+16
-0
TeamTrainingRecordUploadDTO.java
...usiness/teamtraining/dto/TeamTrainingRecordUploadDTO.java
+19
-0
TeamTrainingUserScheduleVO.java
...business/teamtraining/dto/TeamTrainingUserScheduleVO.java
+9
-0
TeamTrainingBusinessMapper.java
...iness/teamtraining/mapper/TeamTrainingBusinessMapper.java
+4
-0
TeamTrainingService.java
...pi/business/teamtraining/service/TeamTrainingService.java
+69
-8
SportUserTrainingLogService.java
...ness/traininglog/service/SportUserTrainingLogService.java
+21
-0
TeamTrainingBusinessMapper.xml
...ources/mapper/teamtraining/TeamTrainingBusinessMapper.xml
+8
-0
No files found.
server-api/src/main/java/com/antai/sport/http/server/server/api/business/teamtraining/controller/TeamTrainingController.java
View file @
ea67eb85
...
@@ -64,4 +64,17 @@ public class TeamTrainingController {
...
@@ -64,4 +64,17 @@ public class TeamTrainingController {
return
success
(
teamTrainingService
.
rank
(
teamTrainingId
));
return
success
(
teamTrainingService
.
rank
(
teamTrainingId
));
}
}
@ApiOperation
(
"玩家加入团练数据初始化"
)
@PostMapping
(
"/record/init"
)
public
ResponseEntity
<
Result
<
TeamTrainingPlayerRecordInitResponseDTO
>>
recordInit
(
@RequestBody
TeamTrainingPlayerRecordInitRequestDTO
param
)
{
return
success
(
teamTrainingService
.
recordInit
(
param
));
}
@ApiOperation
(
"团练记录上传"
)
@PostMapping
(
"/record/upload"
)
public
ResponseEntity
<
Result
>
recordUpload
(
@RequestBody
List
<
TeamTrainingRecordUploadDTO
>
dataList
)
{
teamTrainingService
.
recordUpload
(
dataList
);
return
success
();
}
}
}
server-api/src/main/java/com/antai/sport/http/server/server/api/business/teamtraining/converter/TeamTrainingConverter.java
View file @
ea67eb85
...
@@ -2,8 +2,10 @@ package com.antai.sport.http.server.server.api.business.teamtraining.converter;
...
@@ -2,8 +2,10 @@ package com.antai.sport.http.server.server.api.business.teamtraining.converter;
import
com.antai.sport.http.server.repository.teamtraining.entity.TeamTraining
;
import
com.antai.sport.http.server.repository.teamtraining.entity.TeamTraining
;
import
com.antai.sport.http.server.repository.teamtraining.entity.TeamTrainingBanner
;
import
com.antai.sport.http.server.repository.teamtraining.entity.TeamTrainingBanner
;
import
com.antai.sport.http.server.repository.teamtraining.entity.TeamTrainingPlayerRecord
;
import
com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingBannerResponseDTO
;
import
com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingBannerResponseDTO
;
import
com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingInfoResponseDTO
;
import
com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingInfoResponseDTO
;
import
com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingRecordUploadDTO
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mapper
;
import
java.util.List
;
import
java.util.List
;
...
@@ -14,4 +16,6 @@ public interface TeamTrainingConverter {
...
@@ -14,4 +16,6 @@ public interface TeamTrainingConverter {
List
<
TeamTrainingBannerResponseDTO
>
toTeamTrainingBannerResponseDTO
(
List
<
TeamTrainingBanner
>
source
);
List
<
TeamTrainingBannerResponseDTO
>
toTeamTrainingBannerResponseDTO
(
List
<
TeamTrainingBanner
>
source
);
TeamTrainingInfoResponseDTO
toTeamTrainingInfoResponseDTO
(
TeamTraining
source
);
TeamTrainingInfoResponseDTO
toTeamTrainingInfoResponseDTO
(
TeamTraining
source
);
TeamTrainingPlayerRecord
toTeamTrainingPlayerRecord
(
TeamTrainingRecordUploadDTO
source
);
}
}
server-api/src/main/java/com/antai/sport/http/server/server/api/business/teamtraining/dto/TeamTrainingPlayerRecordInitRequestDTO.java
0 → 100644
View file @
ea67eb85
package
com
.
antai
.
sport
.
http
.
server
.
server
.
api
.
business
.
teamtraining
.
dto
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
@Data
@ApiModel
(
"加入团练记录初始化请求参数"
)
public
class
TeamTrainingPlayerRecordInitRequestDTO
{
@ApiModelProperty
(
"团练id"
)
private
Long
teamTrainingId
;
@ApiModelProperty
(
"玩家id"
)
private
Long
playerId
;
}
server-api/src/main/java/com/antai/sport/http/server/server/api/business/teamtraining/dto/TeamTrainingPlayerRecordInitResponseDTO.java
0 → 100644
View file @
ea67eb85
package
com
.
antai
.
sport
.
http
.
server
.
server
.
api
.
business
.
teamtraining
.
dto
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
@ApiModel
(
"加入团练初始化响应对象"
)
@Data
public
class
TeamTrainingPlayerRecordInitResponseDTO
{
@ApiModelProperty
(
"记录id"
)
private
Long
recordId
;
@ApiModelProperty
(
"运动类型"
)
private
Integer
sportType
;
@ApiModelProperty
(
"游戏模式"
)
private
Integer
gameMode
;
}
server-api/src/main/java/com/antai/sport/http/server/server/api/business/teamtraining/dto/TeamTrainingRecordUploadDTO.java
0 → 100644
View file @
ea67eb85
package
com
.
antai
.
sport
.
http
.
server
.
server
.
api
.
business
.
teamtraining
.
dto
;
import
com.antai.sport.http.server.server.api.common.dto.CyclingDataDTO
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.time.LocalDateTime
;
@Data
@ApiModel
(
"日常赛团练记录上传"
)
public
class
TeamTrainingRecordUploadDTO
extends
CyclingDataDTO
{
@ApiModelProperty
(
"状态 10:未完赛 20:已完赛"
)
public
Integer
status
;
@ApiModelProperty
(
"完成时间 yyyy-MM-dd HH:mm:ss"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
public
LocalDateTime
finishTime
;
}
server-api/src/main/java/com/antai/sport/http/server/server/api/business/teamtraining/dto/TeamTrainingUserScheduleVO.java
0 → 100644
View file @
ea67eb85
package
com
.
antai
.
sport
.
http
.
server
.
server
.
api
.
business
.
teamtraining
.
dto
;
import
lombok.Data
;
@Data
public
class
TeamTrainingUserScheduleVO
{
private
Integer
day
;
private
String
time
;
}
server-api/src/main/java/com/antai/sport/http/server/server/api/business/teamtraining/mapper/TeamTrainingBusinessMapper.java
View file @
ea67eb85
...
@@ -2,8 +2,10 @@ package com.antai.sport.http.server.server.api.business.teamtraining.mapper;
...
@@ -2,8 +2,10 @@ package com.antai.sport.http.server.server.api.business.teamtraining.mapper;
import
com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingForListResponseDTO
;
import
com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingForListResponseDTO
;
import
com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingRankDTO
;
import
com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingRankDTO
;
import
com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingUserScheduleVO
;
import
org.apache.ibatis.annotations.Param
;
import
org.apache.ibatis.annotations.Param
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.util.List
;
import
java.util.List
;
...
@@ -15,4 +17,6 @@ public interface TeamTrainingBusinessMapper {
...
@@ -15,4 +17,6 @@ public interface TeamTrainingBusinessMapper {
List
<
Long
>
getRegisterList
(
@Param
(
"teamTrainingId"
)
Long
teamTrainingId
);
List
<
Long
>
getRegisterList
(
@Param
(
"teamTrainingId"
)
Long
teamTrainingId
);
List
<
TeamTrainingRankDTO
>
getTrainingRank
(
@Param
(
"teamTrainingId"
)
Long
teamTrainingId
);
List
<
TeamTrainingRankDTO
>
getTrainingRank
(
@Param
(
"teamTrainingId"
)
Long
teamTrainingId
);
List
<
TeamTrainingUserScheduleVO
>
getUserRegistSchedule
(
@Param
(
"playerId"
)
Long
playerId
,
@Param
(
"beginDate"
)
LocalDate
beginDate
,
@Param
(
"endDate"
)
LocalDate
endDate
,
@Param
(
"today"
)
LocalDate
today
);
}
}
server-api/src/main/java/com/antai/sport/http/server/server/api/business/teamtraining/service/TeamTrainingService.java
View file @
ea67eb85
...
@@ -2,19 +2,21 @@ package com.antai.sport.http.server.server.api.business.teamtraining.service;
...
@@ -2,19 +2,21 @@ package com.antai.sport.http.server.server.api.business.teamtraining.service;
import
com.antai.sport.http.server.common.exception.BusinessException
;
import
com.antai.sport.http.server.common.exception.BusinessException
;
import
com.antai.sport.http.server.constants.DeleteStatus
;
import
com.antai.sport.http.server.constants.DeleteStatus
;
import
com.antai.sport.http.server.
repository.teamtraining.entity.TeamTraining
;
import
com.antai.sport.http.server.
constants.GameMode
;
import
com.antai.sport.http.server.
repository.teamtraining.entity.TeamTrainingBanner
;
import
com.antai.sport.http.server.
constants.SportType
;
import
com.antai.sport.http.server.repository.
teamtraining.entity.TeamTrainingLeader
;
import
com.antai.sport.http.server.repository.
simplematch.entity.SimpleMatch
;
import
com.antai.sport.http.server.repository.
teamtraining.entity.TeamTrainingPlayerRegistLog
;
import
com.antai.sport.http.server.repository.
sport.entity.SportUser
;
import
com.antai.sport.http.server.repository.
teamtraining.mapper.TeamTrainingBann
erMapper
;
import
com.antai.sport.http.server.repository.
sport.mapper.SportUs
erMapper
;
import
com.antai.sport.http.server.repository.teamtraining.
mapper.TeamTrainingLeaderMapper
;
import
com.antai.sport.http.server.repository.teamtraining.
entity.*
;
import
com.antai.sport.http.server.repository.teamtraining.mapper.
TeamTrainingMapper
;
import
com.antai.sport.http.server.repository.teamtraining.mapper.
*
;
import
com.antai.sport.http.server.
repository.teamtraining.mapper.TeamTrainingPlayerRegistLogMapper
;
import
com.antai.sport.http.server.
server.api.business.praise.service.PraiseService
;
import
com.antai.sport.http.server.server.api.business.teamtraining.converter.TeamTrainingConverter
;
import
com.antai.sport.http.server.server.api.business.teamtraining.converter.TeamTrainingConverter
;
import
com.antai.sport.http.server.server.api.business.teamtraining.dto.*
;
import
com.antai.sport.http.server.server.api.business.teamtraining.dto.*
;
import
com.antai.sport.http.server.server.api.business.teamtraining.mapper.TeamTrainingBusinessMapper
;
import
com.antai.sport.http.server.server.api.business.teamtraining.mapper.TeamTrainingBusinessMapper
;
import
com.antai.sport.http.server.server.api.business.traininglog.service.SportUserTrainingLogService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
...
@@ -34,10 +36,19 @@ public class TeamTrainingService {
...
@@ -34,10 +36,19 @@ public class TeamTrainingService {
private
TeamTrainingMapper
teamTrainingMapper
;
private
TeamTrainingMapper
teamTrainingMapper
;
@Resource
@Resource
private
TeamTrainingLeaderMapper
teamTrainingLeaderMapper
;
private
TeamTrainingLeaderMapper
teamTrainingLeaderMapper
;
@Resource
private
TeamTrainingPlayerRecordMapper
teamTrainingPlayerRecordMapper
;
@Resource
private
SportUserMapper
sportUserMapper
;
@Resource
@Resource
private
TeamTrainingBusinessMapper
teamTrainingBusinessMapper
;
private
TeamTrainingBusinessMapper
teamTrainingBusinessMapper
;
@Resource
private
PraiseService
praiseService
;
@Resource
private
SportUserTrainingLogService
sportUserTrainingLogService
;
/**
/**
* 获取日常赛banner列表
* 获取日常赛banner列表
*
*
...
@@ -129,4 +140,54 @@ public class TeamTrainingService {
...
@@ -129,4 +140,54 @@ public class TeamTrainingService {
public
List
<
TeamTrainingRankDTO
>
rank
(
Long
teamTrainingId
)
{
public
List
<
TeamTrainingRankDTO
>
rank
(
Long
teamTrainingId
)
{
return
teamTrainingBusinessMapper
.
getTrainingRank
(
teamTrainingId
);
return
teamTrainingBusinessMapper
.
getTrainingRank
(
teamTrainingId
);
}
}
/**
* 初始化玩家记录
*
* @param param
* @return
*/
public
TeamTrainingPlayerRecordInitResponseDTO
recordInit
(
TeamTrainingPlayerRecordInitRequestDTO
param
)
{
TeamTrainingPlayerRecordInitResponseDTO
result
=
new
TeamTrainingPlayerRecordInitResponseDTO
();
result
.
setSportType
(
SportType
.
BICYCLE
);
result
.
setGameMode
(
GameMode
.
GROUP_TRAINING
);
QueryWrapper
<
TeamTrainingPlayerRecord
>
countQuery
=
new
QueryWrapper
<>();
countQuery
.
eq
(
"team_training_id"
,
param
.
getTeamTrainingId
());
countQuery
.
eq
(
"player_id"
,
param
.
getPlayerId
());
Boolean
isRepeat
=
teamTrainingPlayerRecordMapper
.
selectCount
(
countQuery
)
>
0
;
if
(
isRepeat
)
{
throw
new
BusinessException
(
"您已进入不能重复进入"
);
}
TeamTrainingPlayerRecord
record
=
new
TeamTrainingPlayerRecord
();
record
.
setTeamTrainingId
(
param
.
getTeamTrainingId
());
record
.
setPlayerId
(
param
.
getPlayerId
());
record
.
setEntryTime
(
LocalDateTime
.
now
());
teamTrainingPlayerRecordMapper
.
insert
(
record
);
result
.
setRecordId
(
record
.
getId
());
return
result
;
}
/**
* 比赛记录上传
*/
@Transactional
public
void
recordUpload
(
List
<
TeamTrainingRecordUploadDTO
>
dataList
)
{
dataList
.
forEach
(
item
->
{
TeamTrainingPlayerRecord
oldRecord
=
teamTrainingPlayerRecordMapper
.
selectById
(
item
.
getRecordId
());
if
(
oldRecord
.
getStatus
()
==
null
)
{
SportUser
user
=
sportUserMapper
.
selectById
(
oldRecord
.
getPlayerId
());
item
.
setWeight
(
user
.
getWeight
());
TeamTrainingPlayerRecord
record
=
teamTrainingConverter
.
toTeamTrainingPlayerRecord
(
item
);
record
.
setPraiseNum
(
praiseService
.
getPraiseByGameModeAndRecordId
(
GameMode
.
GROUP_TRAINING
,
item
.
getRecordId
()));
teamTrainingPlayerRecordMapper
.
updateById
(
record
);
//生成骑行日志
TeamTraining
teamTraining
=
teamTrainingMapper
.
selectById
(
oldRecord
.
getTeamTrainingId
());
sportUserTrainingLogService
.
createBicycleTrainingLog
(
oldRecord
.
getPlayerId
(),
GameMode
.
GROUP_TRAINING
,
oldRecord
.
getId
(),
teamTraining
.
getMap
(),
teamTraining
.
getPath
(),
record
.
getPraiseNum
(),
item
);
}
});
}
}
}
server-api/src/main/java/com/antai/sport/http/server/server/api/business/traininglog/service/SportUserTrainingLogService.java
View file @
ea67eb85
...
@@ -14,6 +14,8 @@ import com.antai.sport.http.server.repository.sport.mapper.SportUserSummaryMappe
...
@@ -14,6 +14,8 @@ import com.antai.sport.http.server.repository.sport.mapper.SportUserSummaryMappe
import
com.antai.sport.http.server.repository.sport.mapper.SportUserTrainingLogMapper
;
import
com.antai.sport.http.server.repository.sport.mapper.SportUserTrainingLogMapper
;
import
com.antai.sport.http.server.server.api.business.simplematch.dto.SimpleMatchUserScheduleVO
;
import
com.antai.sport.http.server.server.api.business.simplematch.dto.SimpleMatchUserScheduleVO
;
import
com.antai.sport.http.server.server.api.business.simplematch.mapper.SimpleMatchBusinessMapper
;
import
com.antai.sport.http.server.server.api.business.simplematch.mapper.SimpleMatchBusinessMapper
;
import
com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingUserScheduleVO
;
import
com.antai.sport.http.server.server.api.business.teamtraining.mapper.TeamTrainingBusinessMapper
;
import
com.antai.sport.http.server.server.api.business.traininglog.converter.SportUserTrainingLogConverter
;
import
com.antai.sport.http.server.server.api.business.traininglog.converter.SportUserTrainingLogConverter
;
import
com.antai.sport.http.server.server.api.business.traininglog.dto.SportUserTrainingLogSummaryVO
;
import
com.antai.sport.http.server.server.api.business.traininglog.dto.SportUserTrainingLogSummaryVO
;
import
com.antai.sport.http.server.server.api.business.traininglog.dto.SportUserTrainingLogVO
;
import
com.antai.sport.http.server.server.api.business.traininglog.dto.SportUserTrainingLogVO
;
...
@@ -55,6 +57,8 @@ public class SportUserTrainingLogService {
...
@@ -55,6 +57,8 @@ public class SportUserTrainingLogService {
private
SportUserMonthRankBusinessMapper
sportUserMonthRankBusinessMapper
;
private
SportUserMonthRankBusinessMapper
sportUserMonthRankBusinessMapper
;
@Resource
@Resource
private
SimpleMatchBusinessMapper
simpleMatchBusinessMapper
;
private
SimpleMatchBusinessMapper
simpleMatchBusinessMapper
;
@Resource
private
TeamTrainingBusinessMapper
teamTrainingBusinessMapper
;
@Resource
@Resource
private
SportUserTrainingLogConverter
sportUserTrainingLogConverter
;
private
SportUserTrainingLogConverter
sportUserTrainingLogConverter
;
...
@@ -275,6 +279,23 @@ public class SportUserTrainingLogService {
...
@@ -275,6 +279,23 @@ public class SportUserTrainingLogService {
schedule
.
setTypeName
(
"日常赛"
);
schedule
.
setTypeName
(
"日常赛"
);
resultMap
.
get
(
item
.
getDay
()).
getScheduleList
().
add
(
schedule
);
resultMap
.
get
(
item
.
getDay
()).
getScheduleList
().
add
(
schedule
);
});
});
List
<
TeamTrainingUserScheduleVO
>
teamTrainingUserScheduleList
=
teamTrainingBusinessMapper
.
getUserRegistSchedule
(
userId
,
beginDate
,
endDate
,
today
);
teamTrainingUserScheduleList
.
forEach
(
item
->
{
if
(!
resultMap
.
containsKey
(
item
.
getDay
()))
{
ScheduleResponseDTO
scheduleResponseDTO
=
new
ScheduleResponseDTO
();
scheduleResponseDTO
.
setScheduleList
(
new
ArrayList
<>());
scheduleResponseDTO
.
setDay
(
item
.
getDay
());
scheduleResponseDTO
.
setActive
(
false
);
resultMap
.
put
(
item
.
getDay
(),
scheduleResponseDTO
);
}
ScheduleVO
schedule
=
new
ScheduleVO
();
schedule
.
setTime
(
item
.
getTime
());
schedule
.
setType
(
GameMode
.
GROUP_TRAINING
);
schedule
.
setTypeName
(
"团练"
);
resultMap
.
get
(
item
.
getDay
()).
getScheduleList
().
add
(
schedule
);
});
for
(
Integer
i
=
1
;
i
<=
31
;
i
++)
{
for
(
Integer
i
=
1
;
i
<=
31
;
i
++)
{
if
(
resultMap
.
containsKey
(
i
))
{
if
(
resultMap
.
containsKey
(
i
))
{
resultList
.
add
(
resultMap
.
get
(
i
));
resultList
.
add
(
resultMap
.
get
(
i
));
...
...
server-api/src/main/resources/mapper/teamtraining/TeamTrainingBusinessMapper.xml
View file @
ea67eb85
...
@@ -54,4 +54,12 @@
...
@@ -54,4 +54,12 @@
where t1.team_training_id = #{teamTrainingId}
where t1.team_training_id = #{teamTrainingId}
order by training_rank asc
order by training_rank asc
</select>
</select>
<select
id=
"getUserRegistSchedule"
resultType=
"com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingUserScheduleVO"
>
select DAYOFMONTH(t2.start_time) day,date_format(t2.start_time,'%H:%i') as time
from team_training_player_regist_log t1
join team_training t2 on t1.team_training_id = t2.id
where t1.player_id = #{playerId} and t2.start_time
>
= #{today} and t2.start_time
>
= #{beginDate} and t2.start_time
<
#{endDate}
order by t2.start_time asc
</select>
</mapper>
</mapper>
\ No newline at end of file
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