Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
8
8timerapiv200
Overview
Overview
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
8timerv2
8timerapiv200
Commits
8f686cc8
Commit
8f686cc8
authored
5 years ago
by
dengshichuan
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dsc' into 'develop'
Dsc See merge request 8timerv2/8timerapiv200!174
parents
4c107a27
be85fd60
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
243 additions
and
8 deletions
+243
-8
src/main/java/cn/timer/api/controller/crm/CrmController.java
+161
-5
src/main/java/cn/timer/api/controller/crm/CrmRuleController.java
+7
-3
src/main/java/cn/timer/api/dto/crm/CrmClientDataImportVo.java
+61
-0
src/main/resources/application-dev.yml
+4
-0
src/main/resources/application-pro.yml
+5
-0
src/main/resources/application-test.yml
+5
-0
No files found.
src/main/java/cn/timer/api/controller/crm/CrmController.java
View file @
8f686cc8
...
@@ -7,6 +7,7 @@
...
@@ -7,6 +7,7 @@
*/
*/
package
cn
.
timer
.
api
.
controller
.
crm
;
package
cn
.
timer
.
api
.
controller
.
crm
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.Collections
;
import
java.util.Comparator
;
import
java.util.Comparator
;
...
@@ -17,6 +18,7 @@ import java.util.Map;
...
@@ -17,6 +18,7 @@ import java.util.Map;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.web.bind.annotation.DeleteMapping
;
import
org.springframework.web.bind.annotation.DeleteMapping
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.GetMapping
;
...
@@ -25,7 +27,6 @@ import org.springframework.web.bind.annotation.RequestBody;
...
@@ -25,7 +27,6 @@ import org.springframework.web.bind.annotation.RequestBody;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.multipart.MultipartFile
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
...
@@ -33,7 +34,10 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
...
@@ -33,7 +34,10 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.io.resource.ResourceUtil
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.poi.excel.ExcelReader
;
import
cn.hutool.poi.excel.ExcelUtil
;
import
cn.timer.api.bean.clazz.ClientSourceClass
;
import
cn.timer.api.bean.clazz.ClientSourceClass
;
import
cn.timer.api.bean.clazz.ClientTypeClass
;
import
cn.timer.api.bean.clazz.ClientTypeClass
;
import
cn.timer.api.bean.clazz.IndustryClass
;
import
cn.timer.api.bean.clazz.IndustryClass
;
...
@@ -48,8 +52,10 @@ import cn.timer.api.bean.crm.CrmSeaRule;
...
@@ -48,8 +52,10 @@ import cn.timer.api.bean.crm.CrmSeaRule;
import
cn.timer.api.bean.yggl.YgglMainEmp
;
import
cn.timer.api.bean.yggl.YgglMainEmp
;
import
cn.timer.api.config.annotation.CurrentUser
;
import
cn.timer.api.config.annotation.CurrentUser
;
import
cn.timer.api.config.annotation.UserBean
;
import
cn.timer.api.config.annotation.UserBean
;
import
cn.timer.api.controller.dzht.cn.tign.hz.comm.FileHelper
;
import
cn.timer.api.dao.crm.CrmClientContactsMapper
;
import
cn.timer.api.dao.crm.CrmClientContactsMapper
;
import
cn.timer.api.dao.crm.CrmClientDataMapper
;
import
cn.timer.api.dao.crm.CrmClientDataMapper
;
import
cn.timer.api.dto.crm.CrmClientDataImportVo
;
import
cn.timer.api.utils.CheckUtil
;
import
cn.timer.api.utils.CheckUtil
;
import
cn.timer.api.utils.Result
;
import
cn.timer.api.utils.Result
;
import
cn.timer.api.utils.ResultUtil
;
import
cn.timer.api.utils.ResultUtil
;
...
@@ -71,6 +77,9 @@ import io.swagger.annotations.ApiOperation;
...
@@ -71,6 +77,9 @@ import io.swagger.annotations.ApiOperation;
@RequestMapping
(
value
=
"/crm"
,
produces
=
{
"application/json"
})
@RequestMapping
(
value
=
"/crm"
,
produces
=
{
"application/json"
})
public
class
CrmController
{
public
class
CrmController
{
@Value
(
value
=
"${config-8timer.crm-excel.realPath}"
)
private
String
realPath
;
@Autowired
@Autowired
private
CrmClientDataMapper
crmClientDataMapper
;
private
CrmClientDataMapper
crmClientDataMapper
;
...
@@ -862,6 +871,20 @@ public class CrmController {
...
@@ -862,6 +871,20 @@ public class CrmController {
return
list
.
stream
().
map
(
SysRegion:
:
getKeyId
).
collect
(
Collectors
.
toList
());
return
list
.
stream
().
map
(
SysRegion:
:
getKeyId
).
collect
(
Collectors
.
toList
());
}
}
@GetMapping
(
"getAllBusinessMan"
)
@ApiOperation
(
value
=
"获取全部业务员"
,
httpMethod
=
"GET"
,
notes
=
"接口发布说明"
)
public
Result
<
Object
>
getAllBusinessMan
(
@CurrentUser
UserBean
userBean
)
{
List
<
Map
<
String
,
Object
>>
list
=
new
ArrayList
<
Map
<
String
,
Object
>>();
List
<
Integer
>
empNums
=
getAllBusinessGroupMember
(
getOrgCode
(
userBean
),
null
);
for
(
Integer
integer
:
empNums
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<
String
,
Object
>();
map
.
put
(
"empNum"
,
integer
);
map
.
put
(
"name"
,
getEmpName
(
getOrgCode
(
userBean
),
integer
));
list
.
add
(
map
);
}
return
ResultUtil
.
data
(
list
,
"获取成功"
);
}
// 获取公司全部业务员
// 获取公司全部业务员
private
List
<
Integer
>
getAllBusinessGroupMember
(
Integer
orgCode
,
Integer
groupId
)
{
private
List
<
Integer
>
getAllBusinessGroupMember
(
Integer
orgCode
,
Integer
groupId
)
{
List
<
CrmBusinessGroupMember
>
list
=
CrmBusinessGroupMember
.
builder
().
build
()
List
<
CrmBusinessGroupMember
>
list
=
CrmBusinessGroupMember
.
builder
().
build
()
...
@@ -904,6 +927,7 @@ public class CrmController {
...
@@ -904,6 +927,7 @@ public class CrmController {
List
<
Integer
>
members
=
getAllBusinessGroupMember
(
orgCode
,
groupId
);
List
<
Integer
>
members
=
getAllBusinessGroupMember
(
orgCode
,
groupId
);
for
(
Integer
memberId
:
members
)
{
for
(
Integer
memberId
:
members
)
{
Map
<
String
,
Object
>
map
=
selectMap
(
orgCode
,
memberId
,
status
,
startCreateTime
,
endCreateTime
);
Map
<
String
,
Object
>
map
=
selectMap
(
orgCode
,
memberId
,
status
,
startCreateTime
,
endCreateTime
);
System
.
err
.
println
(
map
);
if
((
Integer
)
map
.
get
(
"num"
)
>
0
)
{
if
((
Integer
)
map
.
get
(
"num"
)
>
0
)
{
list
.
add
(
map
);
list
.
add
(
map
);
}
}
...
@@ -914,6 +938,7 @@ public class CrmController {
...
@@ -914,6 +938,7 @@ public class CrmController {
list
.
add
(
map
);
list
.
add
(
map
);
}
}
}
}
System
.
err
.
println
(
"list:"
+
list
);
return
list
;
return
list
;
}
}
...
@@ -1007,10 +1032,141 @@ public class CrmController {
...
@@ -1007,10 +1032,141 @@ public class CrmController {
return
map
;
return
map
;
}
}
// TODO 导入客户
/**
@PostMapping
(
"importexcel"
)
* 导入
public
Object
importWatchExcel
(
@RequestParam
(
"excelFile"
)
MultipartFile
xlsFile
)
{
*
return
xlsFile
;
* @param url 上传路径
* @return
*/
@PostMapping
(
"importClient"
)
@Transactional
@ApiOperation
(
value
=
"导入客户"
,
httpMethod
=
"POST"
,
notes
=
"接口发布说明"
)
public
Result
<
Object
>
importClient
(
@CurrentUser
UserBean
userBean
,
@RequestParam
String
url
)
{
Integer
empNum
=
getEmpNum
(
userBean
);
Integer
orgCode
=
getOrgCode
(
userBean
);
String
filePath
=
null
;
try
{
String
time
=
DateUtil
.
format
(
new
Date
(),
"yyyyMMddHHmmssSSS"
);
filePath
=
FileHelper
.
downLoadFromUrl
(
url
,
time
+
".xls"
,
realPath
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
// 从文件中读取Excel为ExcelReader
ExcelReader
reader
;
// 从流中读取Excel为ExcelReader(比如从ClassPath中读取Excel文件)
reader
=
ExcelUtil
.
getReader
(
ResourceUtil
.
getStream
(
filePath
));
reader
.
addHeaderAlias
(
"*客户名称(必填)"
,
"clientName"
);
reader
.
addHeaderAlias
(
"*所属分组(必填)"
,
"belongGroupName"
);
reader
.
addHeaderAlias
(
"行业"
,
"industryName"
);
reader
.
addHeaderAlias
(
"客户类型"
,
"clientTypeName"
);
reader
.
addHeaderAlias
(
"手机号码(客户)"
,
"clientCellphone"
);
reader
.
addHeaderAlias
(
"座机号码"
,
"clientTelephone"
);
reader
.
addHeaderAlias
(
"官网"
,
"clientUrl"
);
reader
.
addHeaderAlias
(
"邮箱"
,
"clientEmail"
);
reader
.
addHeaderAlias
(
"地址"
,
"address"
);
reader
.
addHeaderAlias
(
"联系人姓名"
,
"linkName"
);
reader
.
addHeaderAlias
(
"手机号码(联系人)"
,
"cellphone"
);
reader
.
addHeaderAlias
(
"所属公司"
,
"company"
);
reader
.
addHeaderAlias
(
"性别"
,
"gender"
);
reader
.
addHeaderAlias
(
"职位"
,
"position"
);
reader
.
addHeaderAlias
(
"办公电话"
,
"telephone"
);
reader
.
addHeaderAlias
(
"个人邮箱"
,
"email"
);
reader
.
addHeaderAlias
(
"个人地址"
,
"linkAddress"
);
List
<
CrmClientDataImportVo
>
list
=
reader
.
read
(
0
,
1
,
CrmClientDataImportVo
.
class
);
for
(
CrmClientDataImportVo
crmClientDataImportVo
:
list
)
{
System
.
err
.
println
(
crmClientDataImportVo
);
String
clientName
=
crmClientDataImportVo
.
getClientName
();
// 客户名称(必填)
String
belongGroupName
=
crmClientDataImportVo
.
getBelongGroupName
();
// 分组名(必填)
String
industryName
=
crmClientDataImportVo
.
getIndustryName
();
// 行业名
String
clientTypeName
=
crmClientDataImportVo
.
getClientTypeName
();
// 客户类型名
String
clientCellphone
=
crmClientDataImportVo
.
getClientCellphone
();
// 客户手机号
String
clientTelephone
=
crmClientDataImportVo
.
getClientTelephone
();
// 客户座机号
String
clientUrl
=
crmClientDataImportVo
.
getClientUrl
();
// 官网
String
clientEmail
=
crmClientDataImportVo
.
getClientEmail
();
// 邮箱
String
clientAddress
=
crmClientDataImportVo
.
getAddress
();
// 地址
String
linkname
=
crmClientDataImportVo
.
getLinkName
();
// 联系人姓名
String
linkcellphone
=
crmClientDataImportVo
.
getCellphone
();
// 手机号码
String
linkcompany
=
crmClientDataImportVo
.
getCompany
();
// 所属公司
String
linkgender
=
crmClientDataImportVo
.
getGender
();
// 性别
String
linkposition
=
crmClientDataImportVo
.
getPosition
();
// 职位
String
linktelephone
=
crmClientDataImportVo
.
getTelephone
();
// 办公电话
String
linkemail
=
crmClientDataImportVo
.
getEmail
();
// 个人邮箱
String
linkaddress
=
crmClientDataImportVo
.
getLinkAddress
();
// 个人地址
CrmClientData
crmClientData
=
new
CrmClientData
();
// 业务组
CrmBusinessGroup
crmBusinessGroup
=
CrmBusinessGroup
.
builder
().
build
()
.
selectOne
(
new
LambdaQueryWrapper
<
CrmBusinessGroup
>()
.
eq
(
CrmBusinessGroup:
:
getOrgCode
,
userBean
.
getOrgCode
())
.
eq
(
CrmBusinessGroup:
:
getName
,
belongGroupName
).
select
(
CrmBusinessGroup:
:
getId
));
if
(
crmBusinessGroup
==
null
)
return
ResultUtil
.
error
(
"没有匹配的业务组名称"
);
if
(
StrUtil
.
isNotBlank
(
industryName
))
{
// 行业字典
IndustryClass
industryClass
=
IndustryClass
.
builder
().
build
()
.
selectOne
(
new
LambdaQueryWrapper
<
IndustryClass
>().
eq
(
IndustryClass:
:
getName
,
industryName
)
.
select
(
IndustryClass:
:
getId
));
if
(
industryClass
==
null
)
return
ResultUtil
.
error
(
"没有匹配的行业名称"
);
crmClientData
.
setIndustry
(
industryClass
.
getId
());
}
if
(
StrUtil
.
isNotBlank
(
clientTypeName
))
{
// 客户类型
ClientTypeClass
clientTypeClass
=
ClientTypeClass
.
builder
().
build
()
.
selectOne
(
new
LambdaQueryWrapper
<
ClientTypeClass
>()
.
eq
(
ClientTypeClass:
:
getName
,
clientTypeName
).
select
(
ClientTypeClass:
:
getId
));
if
(
clientTypeClass
==
null
)
return
ResultUtil
.
error
(
"没有匹配的客户类型名称"
);
crmClientData
.
setClientType
(
clientTypeClass
.
getId
());
}
crmClientData
.
setClientStatus
(
0
);
crmClientData
.
setContactsNum
(
1
);
crmClientData
.
setBelongUser
(
empNum
);
crmClientData
.
setBelongUserName
(
getEmpName
(
orgCode
,
empNum
));
crmClientData
.
setClientName
(
clientName
);
crmClientData
.
setBelongGroupName
(
belongGroupName
);
crmClientData
.
setBelongGroup
(
crmBusinessGroup
.
getId
());
crmClientData
.
setIndustryName
(
industryName
);
crmClientData
.
setClientTypeName
(
clientTypeName
);
crmClientData
.
setClientCellphone
(
clientCellphone
);
crmClientData
.
setClientTelephone
(
clientTelephone
);
crmClientData
.
setClientUrl
(
clientUrl
);
crmClientData
.
setClientEmail
(
clientEmail
);
crmClientData
.
setAddress
(
clientAddress
);
crmClientData
.
insert
();
Integer
cid
=
crmClientData
.
getId
();
CrmClientContacts
contacts
=
new
CrmClientContacts
();
contacts
.
setName
(
linkname
);
contacts
.
setCellphone
(
linkcellphone
);
contacts
.
setCompany
(
linkcompany
);
if
(
linkgender
==
"女"
)
contacts
.
setGender
(
0
);
else
if
(
linkgender
==
"男"
)
contacts
.
setGender
(
1
);
else
contacts
.
setGender
(
null
);
contacts
.
setPosition
(
linkposition
);
contacts
.
setTelephone
(
linktelephone
);
contacts
.
setEmail
(
linkemail
);
contacts
.
setAddress
(
linkaddress
);
if
(!(
linkname
==
null
&&
linkcellphone
==
null
&&
linkcompany
==
null
&&
linkgender
==
null
&&
linkposition
==
null
&&
linktelephone
==
null
&&
linkemail
==
null
&&
linkaddress
==
null
))
{
contacts
.
setCid
(
cid
);
contacts
.
insert
();
}
}
return
ResultUtil
.
success
(
"导入成功"
);
}
}
}
}
This diff is collapsed.
Click to expand it.
src/main/java/cn/timer/api/controller/crm/CrmRuleController.java
View file @
8f686cc8
...
@@ -62,21 +62,25 @@ public class CrmRuleController {
...
@@ -62,21 +62,25 @@ public class CrmRuleController {
Integer
status
=
crmClientData
.
getClientStatus
();
Integer
status
=
crmClientData
.
getClientStatus
();
String
belongUserName
=
crmClientData
.
getBelongUserName
();
String
belongUserName
=
crmClientData
.
getBelongUserName
();
String
clientName
=
crmClientData
.
getClientName
();
String
clientName
=
crmClientData
.
getClientName
();
Date
now
=
new
Date
();
// 客户创建时间+ x天 = 过期释放时间
// 客户创建时间+ x天 = 过期释放时间
DateTime
overDate1
=
DateUtil
.
offsetDay
(
createTime
,
one
);
DateTime
overDate1
=
DateUtil
.
offsetDay
(
createTime
,
one
);
Long
compare2
=
null
;
if
(
lastFollowTime
!=
null
)
{
DateTime
overDate2
=
DateUtil
.
offsetDay
(
lastFollowTime
,
two
);
DateTime
overDate2
=
DateUtil
.
offsetDay
(
lastFollowTime
,
two
);
compare2
=
DateUtil
.
between
(
overDate2
,
now
,
DateUnit
.
DAY
,
false
);
}
DateTime
overDate3
=
DateUtil
.
offsetDay
(
createTime
,
three
);
DateTime
overDate3
=
DateUtil
.
offsetDay
(
createTime
,
three
);
// 时间比较
// 时间比较
Date
now
=
new
Date
();
long
compare1
=
DateUtil
.
between
(
overDate1
,
now
,
DateUnit
.
DAY
,
false
);
long
compare1
=
DateUtil
.
between
(
overDate1
,
now
,
DateUnit
.
DAY
,
false
);
long
compare2
=
DateUtil
.
between
(
overDate2
,
now
,
DateUnit
.
DAY
,
false
);
long
compare3
=
DateUtil
.
between
(
overDate3
,
now
,
DateUnit
.
DAY
,
false
);
long
compare3
=
DateUtil
.
between
(
overDate3
,
now
,
DateUnit
.
DAY
,
false
);
// 判断1和2和3
// 判断1和2和3
if
((
lastFollowTime
==
null
&&
compare1
>=
0
)
||
(
lastFollowTime
!=
null
&&
compare2
>=
0
)
if
((
lastFollowTime
==
null
&&
compare1
>=
0
)
||
(
lastFollowTime
!=
null
&&
compare2
>=
0
)
||
(
compare3
>=
0
&&
status
!=
3
&&
status
!=
4
))
||
(
compare3
>=
0
&&
status
!=
3
&&
status
!=
4
))
release
(
crmClientData
);
release
(
crmClientData
);
// 判断4
// 判断4
if
(
compare1
==
-
four
||
compare2
==
-
four
||
compare3
==
-
four
)
if
(
compare1
==
-
four
||
compare2
==
-
four
||
compare3
==
-
four
)
// TODO
remind
(
belongUserName
,
clientName
,
four
);
remind
(
belongUserName
,
clientName
,
four
);
}
}
}
}
...
...
This diff is collapsed.
Click to expand it.
src/main/java/cn/timer/api/dto/crm/CrmClientDataImportVo.java
0 → 100644
View file @
8f686cc8
/**
* Title: CrmClientDataImportVo.java
* Description:
* @author dsc
* @date 2020年6月12日
* @version 1.0
*/
package
cn
.
timer
.
api
.
dto
.
crm
;
import
java.io.Serializable
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* Title: CrmClientDataImportVo.java
*
* @Description:
* @author dsc
* @date 2020年6月12日
* @version 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
CrmClientDataImportVo
implements
Serializable
{
private
static
final
long
serialVersionUID
=
3241644321635711815L
;
// 客户名
private
String
clientName
;
// 组
private
String
belongGroupName
;
// 行业
private
String
industryName
;
// 客户类型
private
String
clientTypeName
;
// 手机号
private
String
clientCellphone
;
// 客户座机
private
String
clientTelephone
;
// 客户官网
private
String
clientUrl
;
// 邮箱
private
String
clientEmail
;
// 详细地址
private
String
address
;
// 联系人信息
private
String
linkName
;
private
String
cellphone
;
private
String
company
;
private
String
gender
;
private
String
position
;
private
String
telephone
;
private
String
email
;
private
String
linkAddress
;
}
This diff is collapsed.
Click to expand it.
src/main/resources/application-dev.yml
View file @
8f686cc8
...
@@ -202,6 +202,9 @@ config-8timer:
...
@@ -202,6 +202,9 @@ config-8timer:
three
:
30
three
:
30
init-password
:
123456
init-password
:
123456
# 客户管理导入服务器保存路径
crm-excel
:
realPath
:
'
D:/excel/'
\ No newline at end of file
This diff is collapsed.
Click to expand it.
src/main/resources/application-pro.yml
View file @
8f686cc8
...
@@ -172,3 +172,7 @@ config-8timer:
...
@@ -172,3 +172,7 @@ config-8timer:
two
:
7
two
:
7
three
:
30
three
:
30
init-password
:
123456
init-password
:
123456
# 客户管理导入服务器保存路径
crm-excel
:
realPath
:
'
crm-excel/'
\ No newline at end of file
This diff is collapsed.
Click to expand it.
src/main/resources/application-test.yml
View file @
8f686cc8
...
@@ -171,3 +171,7 @@ config-8timer:
...
@@ -171,3 +171,7 @@ config-8timer:
two
:
7
two
:
7
three
:
30
three
:
30
init-password
:
123456
init-password
:
123456
# 客户管理导入服务器保存路径
crm-excel
:
realPath
:
'
crm-excel/'
\ No newline at end of file
This diff is collapsed.
Click to expand it.
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