记得上下班打卡 | git大法好,push需谨慎
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liquidnet-bus-v1
Project
Project
Details
Activity
Releases
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
董敬伟
liquidnet-bus-v1
Commits
ff2fc1f5
Commit
ff2fc1f5
authored
Apr 30, 2021
by
张国柄
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
+入场人编辑;
parent
77ef0d62
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
90 additions
and
65 deletions
+90
-65
pom.xml
...quidnet-common-cache/liquidnet-common-cache-redis/pom.xml
+4
-0
RedisCacheConfig.java
...liquidnet.common.cache/redis/config/RedisCacheConfig.java
+17
-19
AdamEntersParam.java
.../java/com/liquidnet/service/adam/dto/AdamEntersParam.java
+7
-5
AdamEntersVo.java
.../java/com/liquidnet/service/adam/dto/vo/AdamEntersVo.java
+5
-0
IAdamEntersService.java
...om/liquidnet/service/adam/service/IAdamEntersService.java
+4
-3
ServiceAdamApplication.java
...in/java/com/liquidnet/service/ServiceAdamApplication.java
+2
-21
AdamEntersController.java
...quidnet/service/adam/controller/AdamEntersController.java
+26
-3
AdamEntersServiceImpl.java
...dnet/service/adam/service/impl/AdamEntersServiceImpl.java
+25
-14
No files found.
liquidnet-bus-common/liquidnet-common-cache/liquidnet-common-cache-redis/pom.xml
View file @
ff2fc1f5
...
@@ -15,5 +15,9 @@
...
@@ -15,5 +15,9 @@
<groupId>
com.fasterxml.jackson.core
</groupId>
<groupId>
com.fasterxml.jackson.core
</groupId>
<artifactId>
jackson-databind
</artifactId>
<artifactId>
jackson-databind
</artifactId>
</dependency>
</dependency>
<dependency>
<groupId>
com.fasterxml.jackson.datatype
</groupId>
<artifactId>
jackson-datatype-jsr310
</artifactId>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
\ No newline at end of file
liquidnet-bus-common/liquidnet-common-cache/liquidnet-common-cache-redis/src/main/java/com.liquidnet.common.cache/redis/config/RedisCacheConfig.java
View file @
ff2fc1f5
...
@@ -3,17 +3,11 @@ package com.liquidnet.common.cache.redis.config;
...
@@ -3,17 +3,11 @@ package com.liquidnet.common.cache.redis.config;
import
com.fasterxml.jackson.annotation.JsonAutoDetect
;
import
com.fasterxml.jackson.annotation.JsonAutoDetect
;
import
com.fasterxml.jackson.annotation.PropertyAccessor
;
import
com.fasterxml.jackson.annotation.PropertyAccessor
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
org.slf4j.Logger
;
import
com.fasterxml.jackson.databind.SerializationFeature
;
import
org.slf4j.LoggerFactory
;
import
com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
;
import
org.springframework.cache.CacheManager
;
import
org.springframework.cache.annotation.CachingConfigurerSupport
;
import
org.springframework.cache.annotation.EnableCaching
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.core.annotation.Order
;
import
org.springframework.data.redis.cache.RedisCacheManager
;
import
org.springframework.data.redis.connection.RedisConnectionFactory
;
import
org.springframework.data.redis.connection.RedisConnectionFactory
;
import
org.springframework.data.redis.connection.jedis.JedisConnectionFactory
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer
;
import
org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer
;
import
org.springframework.data.redis.serializer.StringRedisSerializer
;
import
org.springframework.data.redis.serializer.StringRedisSerializer
;
...
@@ -25,23 +19,27 @@ import org.springframework.data.redis.serializer.StringRedisSerializer;
...
@@ -25,23 +19,27 @@ import org.springframework.data.redis.serializer.StringRedisSerializer;
public
class
RedisCacheConfig
{
public
class
RedisCacheConfig
{
@Bean
@Bean
public
RedisTemplate
<
String
,
Object
>
redisTemplate
(
RedisConnectionFactory
factory
)
{
public
RedisTemplate
<
String
,
Object
>
redisTemplate
(
RedisConnectionFactory
factory
)
{
RedisTemplate
<
String
,
Object
>
template
=
new
RedisTemplate
<
String
,
Object
>();
RedisTemplate
<
String
,
Object
>
redisTemplate
=
new
RedisTemplate
<
String
,
Object
>();
template
.
setConnectionFactory
(
factory
);
redisTemplate
.
setConnectionFactory
(
factory
);
Jackson2JsonRedisSerializer
jackson2JsonRedisSerializer
=
new
Jackson2JsonRedisSerializer
(
Object
.
class
);
Jackson2JsonRedisSerializer
j2jrs
=
new
Jackson2JsonRedisSerializer
(
Object
.
class
);
ObjectMapper
om
=
new
ObjectMapper
();
ObjectMapper
om
=
new
ObjectMapper
();
om
.
setVisibility
(
PropertyAccessor
.
ALL
,
JsonAutoDetect
.
Visibility
.
ANY
);
om
.
setVisibility
(
PropertyAccessor
.
ALL
,
JsonAutoDetect
.
Visibility
.
ANY
);
om
.
enableDefaultTyping
(
ObjectMapper
.
DefaultTyping
.
NON_FINAL
);
om
.
disable
(
SerializationFeature
.
WRITE_DATES_AS_TIMESTAMPS
);
jackson2JsonRedisSerializer
.
setObjectMapper
(
om
);
om
.
registerModule
(
new
JavaTimeModule
());
om
.
activateDefaultTyping
(
om
.
getPolymorphicTypeValidator
(),
ObjectMapper
.
DefaultTyping
.
NON_FINAL
);
j2jrs
.
setObjectMapper
(
om
);
StringRedisSerializer
stringRedisSerializer
=
new
StringRedisSerializer
();
StringRedisSerializer
stringRedisSerializer
=
new
StringRedisSerializer
();
// key采用String的序列化方式
// key采用String的序列化方式
t
emplate
.
setKeySerializer
(
stringRedisSerializer
);
redisT
emplate
.
setKeySerializer
(
stringRedisSerializer
);
// hash的key也采用String的序列化方式
// hash的key也采用String的序列化方式
t
emplate
.
setHashKeySerializer
(
stringRedisSerializer
);
redisT
emplate
.
setHashKeySerializer
(
stringRedisSerializer
);
// value序列化方式采用jackson
// value序列化方式采用jackson
template
.
setValueSerializer
(
jackson2JsonRedisSerializer
);
redisTemplate
.
setValueSerializer
(
j2jrs
);
// hash的value序列化方式采用jackson
// hash的value序列化方式采用jackson
template
.
setHashValueSerializer
(
jackson2JsonRedisSerializer
);
redisTemplate
.
setHashValueSerializer
(
j2jrs
);
t
emplate
.
afterPropertiesSet
();
redisT
emplate
.
afterPropertiesSet
();
return
t
emplate
;
return
redisT
emplate
;
}
}
}
}
liquidnet-bus-service/liquidnet-service-adam/liquidnet-service-adam-api/src/main/java/com/liquidnet/service/adam/dto/AdamEntersParam.java
View file @
ff2fc1f5
...
@@ -8,14 +8,16 @@ import lombok.Data;
...
@@ -8,14 +8,16 @@ import lombok.Data;
@Data
@Data
public
class
AdamEntersParam
implements
java
.
io
.
Serializable
{
public
class
AdamEntersParam
implements
java
.
io
.
Serializable
{
private
static
final
long
serialVersionUID
=
5940725094369061032L
;
private
static
final
long
serialVersionUID
=
5940725094369061032L
;
@ApiModelProperty
(
position
=
10
,
required
=
true
,
value
=
"入场人名称[50]"
,
example
=
"Swagger"
)
@ApiModelProperty
(
position
=
10
,
required
=
false
,
value
=
"入场人ID[50]"
)
private
String
entersId
;
@ApiModelProperty
(
position
=
11
,
required
=
true
,
value
=
"入场人名称[50]"
,
example
=
"Swagger"
)
private
String
name
;
private
String
name
;
@ApiModelProperty
(
position
=
1
1
,
required
=
true
,
value
=
"入场人手机号[11]"
,
example
=
"13100000000"
)
@ApiModelProperty
(
position
=
1
2
,
required
=
true
,
value
=
"入场人手机号[11]"
,
example
=
"13100000000"
)
private
String
mobile
;
private
String
mobile
;
@ApiModelProperty
(
position
=
1
2
,
required
=
true
,
value
=
"证件类型:1-大陆身份证,2-港澳通行证,3-台胞证,4-护照,5-军官证"
,
allowableValues
=
"1,2,3,4,5"
)
@ApiModelProperty
(
position
=
1
3
,
required
=
true
,
value
=
"证件类型:1-大陆身份证,2-港澳通行证,3-台胞证,4-护照,5-军官证"
,
allowableValues
=
"1,2,3,4,5"
)
private
Integer
type
;
private
Integer
type
;
@ApiModelProperty
(
position
=
1
3
,
required
=
true
,
value
=
"入场人证件号[11]"
,
example
=
"110101110001010111"
)
@ApiModelProperty
(
position
=
1
4
,
required
=
true
,
value
=
"入场人证件号[11]"
,
example
=
"110101110001010111"
)
private
String
idCard
;
private
String
idCard
;
@ApiModelProperty
(
position
=
1
4
,
required
=
true
,
value
=
"是否是默认入场人:0-否,1-是"
,
allowableValues
=
"0,1"
)
@ApiModelProperty
(
position
=
1
5
,
required
=
true
,
value
=
"是否是默认入场人:0-否,1-是"
,
allowableValues
=
"0,1"
)
private
Boolean
isDefault
;
private
Boolean
isDefault
;
}
}
liquidnet-bus-service/liquidnet-service-adam/liquidnet-service-adam-api/src/main/java/com/liquidnet/service/adam/dto/vo/AdamEntersVo.java
View file @
ff2fc1f5
...
@@ -32,6 +32,11 @@ public class AdamEntersVo implements java.io.Serializable, Cloneable {
...
@@ -32,6 +32,11 @@ public class AdamEntersVo implements java.io.Serializable, Cloneable {
}
}
public
AdamEntersVo
copy
(
AdamEnters
source
)
{
public
AdamEntersVo
copy
(
AdamEnters
source
)
{
this
.
setName
(
source
.
getName
());
this
.
setIdCard
(
source
.
getIdCard
());
this
.
setMobile
(
source
.
getMobile
());
this
.
setType
(
source
.
getType
());
this
.
setIsDefault
(
source
.
getIsDefault
());
return
this
;
return
this
;
}
}
}
}
liquidnet-bus-service/liquidnet-service-adam/liquidnet-service-adam-api/src/main/java/com/liquidnet/service/adam/service/IAdamEntersService.java
View file @
ff2fc1f5
package
com
.
liquidnet
.
service
.
adam
.
service
;
package
com
.
liquidnet
.
service
.
adam
.
service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.liquidnet.service.adam.dto.vo.AdamEntersVo
;
import
com.liquidnet.service.adam.entity.AdamEnters
;
import
com.liquidnet.service.adam.entity.AdamEnters
;
import
java.util.List
;
import
java.util.List
;
...
@@ -15,9 +14,11 @@ import java.util.List;
...
@@ -15,9 +14,11 @@ import java.util.List;
* @since 2021-04-28
* @since 2021-04-28
*/
*/
public
interface
IAdamEntersService
extends
IService
<
AdamEnters
>
{
public
interface
IAdamEntersService
extends
IService
<
AdamEnters
>
{
List
<
AdamEnters
Vo
>
list
(
String
uid
);
List
<
AdamEnters
>
list
(
String
uid
);
boolean
add
(
AdamEnters
info
);
void
add
(
AdamEnters
info
);
AdamEnters
query
(
String
uid
,
String
entersId
);
AdamEnters
query
(
String
uid
,
String
entersId
);
void
edit
(
AdamEnters
info
);
}
}
liquidnet-bus-service/liquidnet-service-adam/liquidnet-service-adam-impl/src/main/java/com/liquidnet/service/ServiceAdamApplication.java
View file @
ff2fc1f5
...
@@ -29,36 +29,17 @@ import java.net.UnknownHostException;
...
@@ -29,36 +29,17 @@ import java.net.UnknownHostException;
import
java.util.Arrays
;
import
java.util.Arrays
;
@Slf4j
@Slf4j
@SpringBootApplication
(
scanBasePackages
=
{
"com.liquidnet"
})
@EnableEurekaClient
@EnableFeignClients
@EnableFeignClients
@EnableCircuitBreaker
@EnableScheduling
@EnableAsync
@MapperScan
(
basePackages
=
"com.liquidnet.service.adam.mapper"
)
@MapperScan
(
basePackages
=
"com.liquidnet.service.adam.mapper"
)
@EnableTransactionManagement
@SpringBootApplication
(
scanBasePackages
=
{
"com.liquidnet"
})
@EnableConfigurationProperties
public
class
ServiceAdamApplication
implements
CommandLineRunner
{
@EnableAspectJAutoProxy
(
proxyTargetClass
=
true
,
exposeProxy
=
true
)
public
class
ServiceAdamApplication
implements
TransactionManagementConfigurer
,
CommandLineRunner
{
@Autowired
private
DataSource
dataSource
;
@Autowired
@Autowired
private
Environment
environment
;
private
Environment
environment
;
public
static
void
main
(
String
[]
args
)
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
ServiceAdamApplication
.
class
,
args
);
SpringApplication
.
run
(
ServiceAdamApplication
.
class
,
args
);
}
}
@Override
public
PlatformTransactionManager
annotationDrivenTransactionManager
()
{
log
.
info
(
"配置事务管理###########################"
);
return
new
DataSourceTransactionManager
(
dataSource
);
}
@Override
@Override
public
void
run
(
String
...
strings
)
throws
Exception
{
public
void
run
(
String
...
strings
)
throws
Exception
{
try
{
try
{
...
...
liquidnet-bus-service/liquidnet-service-adam/liquidnet-service-adam-impl/src/main/java/com/liquidnet/service/adam/controller/AdamEntersController.java
View file @
ff2fc1f5
...
@@ -17,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired;
...
@@ -17,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
/**
/**
...
@@ -57,10 +58,13 @@ public class AdamEntersController {
...
@@ -57,10 +58,13 @@ public class AdamEntersController {
String
uid
=
"1"
;
String
uid
=
"1"
;
List
<
AdamEntersVo
>
list
=
adamEntersService
.
list
(
uid
);
List
<
AdamEntersVo
>
voList
=
new
ArrayList
<>();
adamEntersService
.
list
(
uid
).
forEach
(
i
->
{
voList
.
add
(
AdamEntersVo
.
getNew
().
copy
(
i
));
});
return
ResponseDto
.
success
(
l
ist
);
return
ResponseDto
.
success
(
voL
ist
);
}
}
@ApiOperationSupport
(
order
=
2
)
@ApiOperationSupport
(
order
=
2
)
...
@@ -78,8 +82,9 @@ public class AdamEntersController {
...
@@ -78,8 +82,9 @@ public class AdamEntersController {
addInfo
.
setCreatedAt
(
LocalDateTime
.
now
());
addInfo
.
setCreatedAt
(
LocalDateTime
.
now
());
addInfo
.
setState
(
1
);
addInfo
.
setState
(
1
);
adamEntersService
.
add
(
addInfo
);
return
adamEntersService
.
add
(
addInfo
)
?
ResponseDto
.
success
()
:
ResponseDto
.
failure
();
return
ResponseDto
.
success
();
}
}
@ApiOperationSupport
(
order
=
3
)
@ApiOperationSupport
(
order
=
3
)
...
@@ -93,4 +98,22 @@ public class AdamEntersController {
...
@@ -93,4 +98,22 @@ public class AdamEntersController {
return
ResponseDto
.
success
(
AdamEntersVo
.
getNew
().
copy
(
info
));
return
ResponseDto
.
success
(
AdamEntersVo
.
getNew
().
copy
(
info
));
}
}
@ApiOperationSupport
(
order
=
4
)
@ApiOperation
(
value
=
"入场人编辑"
)
@PostMapping
(
"edit"
)
public
ResponseDto
<
Object
>
edit
(
@RequestBody
AdamEntersParam
parameter
)
{
// TODO: 2021/4/28 校验、获取登录UID
String
uid
=
"1"
;
AdamEnters
updateInfo
=
new
AdamEnters
();
BeanUtils
.
copyProperties
(
parameter
,
updateInfo
);
updateInfo
.
setUpdatedAt
(
LocalDateTime
.
now
());
updateInfo
.
setUid
(
uid
);
updateInfo
.
setState
(
1
);
adamEntersService
.
edit
(
updateInfo
);
return
ResponseDto
.
success
();
}
}
}
liquidnet-bus-service/liquidnet-service-adam/liquidnet-service-adam-impl/src/main/java/com/liquidnet/service/adam/service/impl/AdamEntersServiceImpl.java
View file @
ff2fc1f5
package
com
.
liquidnet
.
service
.
adam
.
service
.
impl
;
package
com
.
liquidnet
.
service
.
adam
.
service
.
impl
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.liquidnet.common.cache.redis.util.RedisUtil
;
import
com.liquidnet.common.cache.redis.util.RedisUtil
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.adam.constant.AdamRedisConst
;
import
com.liquidnet.service.adam.constant.AdamRedisConst
;
import
com.liquidnet.service.adam.dto.vo.AdamEntersVo
;
import
com.liquidnet.service.adam.entity.AdamEnters
;
import
com.liquidnet.service.adam.entity.AdamEnters
;
import
com.liquidnet.service.adam.mapper.AdamEntersMapper
;
import
com.liquidnet.service.adam.mapper.AdamEntersMapper
;
import
com.liquidnet.service.adam.service.IAdamEntersService
;
import
com.liquidnet.service.adam.service.IAdamEntersService
;
import
com.mongodb.BasicDBObject
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.mongodb.core.MongoTemplate
;
import
org.springframework.data.mongodb.core.MongoTemplate
;
...
@@ -39,35 +41,31 @@ public class AdamEntersServiceImpl extends ServiceImpl<AdamEntersMapper, AdamEnt
...
@@ -39,35 +41,31 @@ public class AdamEntersServiceImpl extends ServiceImpl<AdamEntersMapper, AdamEnt
RedisUtil
redisUtil
;
RedisUtil
redisUtil
;
@Override
@Override
public
List
<
AdamEnters
Vo
>
list
(
String
uid
)
{
public
List
<
AdamEnters
>
list
(
String
uid
)
{
List
<
AdamEnters
Vo
>
v
oList
=
new
ArrayList
<>();
List
<
AdamEnters
>
inf
oList
=
new
ArrayList
<>();
Map
<
Object
,
Object
>
map
=
redisUtil
.
hmget
(
AdamRedisConst
.
INFO_ENTERS
.
concat
(
uid
));
Map
<
Object
,
Object
>
map
=
redisUtil
.
hmget
(
AdamRedisConst
.
INFO_ENTERS
.
concat
(
uid
));
if
(
CollectionUtils
.
isEmpty
(
map
))
{
if
(
CollectionUtils
.
isEmpty
(
map
))
{
List
<
AdamEnters
>
infoList
=
mongoTemplate
.
find
(
Query
.
query
(
Criteria
.
where
(
"uid"
).
is
(
uid
)),
AdamEnters
.
class
,
AdamEnters
.
class
.
getSimpleName
());
infoList
=
mongoTemplate
.
find
(
Query
.
query
(
Criteria
.
where
(
"uid"
).
is
(
uid
)),
AdamEnters
.
class
,
AdamEnters
.
class
.
getSimpleName
());
infoList
.
forEach
(
i
->
{
voList
.
add
(
AdamEntersVo
.
getNew
().
copy
(
i
));
});
}
else
{
}
else
{
for
(
Object
o
:
map
.
values
())
{
infoList
.
add
((
AdamEnters
)
o
);
}
}
}
return
v
oList
;
return
inf
oList
;
}
}
@Override
@Override
public
boolean
add
(
AdamEnters
info
)
{
public
void
add
(
AdamEnters
info
)
{
mongoTemplate
.
insert
(
Collections
.
singletonList
(
info
),
AdamEnters
.
class
.
getSimpleName
());
mongoTemplate
.
insert
(
Collections
.
singletonList
(
info
),
AdamEnters
.
class
.
getSimpleName
());
// TODO: 2021/4/28 放入MQ
// TODO: 2021/4/28 放入MQ
// TODO: 2021/4/28 同步REDIS
// TODO: 2021/4/28 同步REDIS
boolean
hset
=
redisUtil
.
hset
(
AdamRedisConst
.
INFO_ENTERS
.
concat
(
info
.
getUid
()),
info
.
getEntersId
(),
info
);
redisUtil
.
hset
(
AdamRedisConst
.
INFO_ENTERS
.
concat
(
info
.
getUid
()),
info
.
getEntersId
(),
info
);
log
.
info
(
"add sync redis result:{}"
,
hset
);
return
true
;
}
}
@Override
@Override
...
@@ -83,4 +81,17 @@ public class AdamEntersServiceImpl extends ServiceImpl<AdamEntersMapper, AdamEnt
...
@@ -83,4 +81,17 @@ public class AdamEntersServiceImpl extends ServiceImpl<AdamEntersMapper, AdamEnt
return
info
;
return
info
;
}
}
@Override
public
void
edit
(
AdamEnters
info
)
{
BasicDBObject
object
=
new
BasicDBObject
(
"$set"
,
JSON
.
parse
(
JsonUtils
.
toJson
(
info
)));
mongoTemplate
.
getCollection
(
AdamEnters
.
class
.
getSimpleName
())
.
updateOne
(
Query
.
query
(
Criteria
.
where
(
"entersId"
).
is
(
info
.
getEntersId
())).
getQueryObject
(),
object
);
// TODO: 2021/4/28 放入MQ
// TODO: 2021/4/28 同步REDIS
redisUtil
.
hset
(
AdamRedisConst
.
INFO_ENTERS
.
concat
(
info
.
getUid
()),
info
.
getEntersId
(),
info
);
}
}
}
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