Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-boot-biz
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
项目统一框架
amos-boot-biz
Commits
de333899
Commit
de333899
authored
Jul 19, 2022
by
高建强
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
item:添加告警日志分页列表
parent
580e0230
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
116 additions
and
55 deletions
+116
-55
ConfigureController.java
...m/yeejoin/equipmanage/controller/ConfigureController.java
+45
-1
EquipmentSpecificAlarmMapper.java
...join/equipmanage/mapper/EquipmentSpecificAlarmMapper.java
+2
-0
IEquipmentSpecificAlarmService.java
...n/equipmanage/service/IEquipmentSpecificAlarmService.java
+2
-3
EquipmentSpecificAlarmServiceImpl.java
...anage/service/impl/EquipmentSpecificAlarmServiceImpl.java
+41
-51
EquipmentSpecificAlarmMapper.xml
...rc/main/resources/mapper/EquipmentSpecificAlarmMapper.xml
+26
-0
No files found.
amos-boot-module/amos-boot-module-biz/amos-boot-module-equip-biz/src/main/java/com/yeejoin/equipmanage/controller/ConfigureController.java
View file @
de333899
package
com
.
yeejoin
.
equipmanage
.
controller
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.yeejoin.amos.boot.biz.common.bo.ReginParams
;
import
com.yeejoin.equipmanage.common.utils.*
;
import
com.yeejoin.equipmanage.service.IEquipmentSpecificAlarmService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.MediaType
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.typroject.tyboot.core.foundation.enumeration.UserType
;
import
org.typroject.tyboot.core.foundation.utils.ValidationUtil
;
import
org.typroject.tyboot.core.restful.doc.TycloudOperation
;
import
org.typroject.tyboot.core.restful.utils.ResponseModel
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
@RestController
@Api
(
tags
=
"组态需求 -- API"
)
@RequestMapping
(
value
=
"/configure"
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
public
class
ConfigureController
{
public
class
ConfigureController
extends
AbstractBaseController
{
@Autowired
private
IEquipmentSpecificAlarmService
equipmentSpecificAlarmService
;
@RequestMapping
(
value
=
"/alarmLogPage"
,
method
=
RequestMethod
.
GET
)
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"列表分页查询"
,
produces
=
"application/json;charset=UTF-8"
,
notes
=
"列表分页查询"
)
public
ResponseModel
pageQuery
(
@RequestParam
(
required
=
false
)
String
system
,
CommonPageable
commonPageable
)
{
if
(
commonPageable
.
getPageNumber
()
==
0
)
{
commonPageable
.
setPageNumber
(
1
);
}
ReginParams
reginParams
=
getSelectedOrgInfo
();
List
<
CommonRequest
>
queryRequests
=
new
ArrayList
<>();
CommonRequest
request7
=
new
CommonRequest
();
request7
.
setName
(
"system"
);
request7
.
setValue
(
StringUtil
.
isNotEmpty
(
system
)
?
StringUtils
.
trimToNull
(
system
)
:
null
);
queryRequests
.
add
(
request7
);
if
(!
ValidationUtil
.
isEmpty
(
reginParams
.
getPersonIdentity
()))
{
CommonRequest
request13
=
new
CommonRequest
();
request13
.
setName
(
"bizOrgCode"
);
request13
.
setValue
(
StringUtil
.
isNotEmpty
(
reginParams
.
getPersonIdentity
().
getBizOrgCode
())
?
reginParams
.
getPersonIdentity
().
getBizOrgCode
()
:
null
);
queryRequests
.
add
(
request13
);
}
CommonPageInfoParam
param
=
CommonPageParamUtil
.
fillCommonPageInfoParam
(
queryRequests
,
commonPageable
);
Page
<
Map
<
String
,
Object
>>
list
=
equipmentSpecificAlarmService
.
pageQuery
(
param
);
return
CommonResponseUtil
.
success
(
list
);
}
}
amos-boot-module/amos-boot-module-biz/amos-boot-module-equip-biz/src/main/java/com/yeejoin/equipmanage/mapper/EquipmentSpecificAlarmMapper.java
View file @
de333899
...
...
@@ -139,6 +139,8 @@ public interface EquipmentSpecificAlarmMapper extends BaseMapper<EquipmentSpecif
Page
<
Map
<
String
,
Object
>>
page
(
Page
page
,
@Param
(
"param"
)
CommonPageInfoParam
param
);
Page
<
Map
<
String
,
Object
>>
pageQuery
(
Page
page
,
@Param
(
"param"
)
CommonPageInfoParam
param
);
List
<
HashMap
<
String
,
Object
>>
getAlarmList
(
CommonPageInfoParam
param
);
...
...
amos-boot-module/amos-boot-module-biz/amos-boot-module-equip-biz/src/main/java/com/yeejoin/equipmanage/service/IEquipmentSpecificAlarmService.java
View file @
de333899
...
...
@@ -3,7 +3,6 @@ package com.yeejoin.equipmanage.service;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.yeejoin.equipmanage.common.datasync.entity.FireEquipmentFireAlarm
;
import
com.yeejoin.equipmanage.common.dto.OrgUsrDto
;
import
com.yeejoin.equipmanage.common.entity.EquipmentSpecificAlarm
;
import
com.yeejoin.equipmanage.common.entity.EquipmentSpecificAlarmLog
;
import
com.yeejoin.equipmanage.common.entity.dto.AlarmDTO
;
...
...
@@ -31,6 +30,8 @@ public interface IEquipmentSpecificAlarmService extends IService<EquipmentSpecif
Page
<
Map
<
String
,
Object
>>
listPage
(
CommonPageInfoParam
param
);
Page
<
Map
<
String
,
Object
>>
pageQuery
(
CommonPageInfoParam
param
);
void
handleExport
(
HttpServletResponse
response
,
List
<
Long
>
ids
,
String
alarmType
);
List
<
HashMap
<
String
,
Object
>>
getColumn
(
String
alarmType
);
...
...
@@ -65,7 +66,6 @@ public interface IEquipmentSpecificAlarmService extends IService<EquipmentSpecif
List
<
EquipmentSpecificAlarmLog
>
getConfirmUser
();
//各种类型统计
Integer
getcountAlarmtype
(
String
tyep
);
...
...
@@ -73,7 +73,6 @@ public interface IEquipmentSpecificAlarmService extends IService<EquipmentSpecif
Integer
getcountAlarmHandle
(
String
tyep
);
/**
*
* <pre>
* 根据装备id和查询指定状态告警数据
* </pre>
...
...
amos-boot-module/amos-boot-module-biz/amos-boot-module-equip-biz/src/main/java/com/yeejoin/equipmanage/service/impl/EquipmentSpecificAlarmServiceImpl.java
View file @
de333899
package
com
.
yeejoin
.
equipmanage
.
service
.
impl
;
import
java.net.Inet4Address
;
import
java.net.InetAddress
;
import
java.net.NetworkInterface
;
import
java.net.SocketException
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.time.LocalDateTime
;
import
java.time.LocalTime
;
import
java.time.ZoneId
;
import
java.time.format.DateTimeFormatter
;
import
java.time.temporal.TemporalAccessor
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.Enumeration
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
javax.servlet.http.HttpServletResponse
;
import
com.yeejoin.equipmanage.common.dto.OrgUsrDto
;
import
com.yeejoin.equipmanage.common.vo.*
;
import
com.yeejoin.equipmanage.fegin.JcsFeign
;
import
com.yeejoin.equipmanage.service.*
;
import
liquibase.pro.packaged.x
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.domain.PageImpl
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.ObjectUtils
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
...
...
@@ -37,11 +7,8 @@ import com.google.common.collect.Lists;
import
com.google.common.collect.Maps
;
import
com.yeejoin.amos.boot.biz.common.excel.ExcelUtil
;
import
com.yeejoin.equipmanage.common.datasync.entity.FireEquipmentFireAlarm
;
import
com.yeejoin.equipmanage.common.entity.EquipmentSpecific
;
import
com.yeejoin.equipmanage.common.entity.EquipmentSpecificAlarm
;
import
com.yeejoin.equipmanage.common.entity.EquipmentSpecificAlarmLog
;
import
com.yeejoin.equipmanage.common.entity.FireFightingSystemEntity
;
import
com.yeejoin.equipmanage.common.entity.Video
;
import
com.yeejoin.equipmanage.common.dto.OrgUsrDto
;
import
com.yeejoin.equipmanage.common.entity.*
;
import
com.yeejoin.equipmanage.common.entity.dto.AlarmDTO
;
import
com.yeejoin.equipmanage.common.entity.dto.EquipSpecificAlarmDTO
;
import
com.yeejoin.equipmanage.common.entity.vo.VideoVO
;
...
...
@@ -52,11 +19,28 @@ import com.yeejoin.equipmanage.common.enums.EquipmentDataEnum;
import
com.yeejoin.equipmanage.common.utils.CommonPageInfoParam
;
import
com.yeejoin.equipmanage.common.utils.DateUtils
;
import
com.yeejoin.equipmanage.common.utils.StringUtil
;
import
com.yeejoin.equipmanage.mapper.ConfirmAlarmMapper
;
import
com.yeejoin.equipmanage.mapper.EquipmentSpecificAlarmLogMapper
;
import
com.yeejoin.equipmanage.mapper.EquipmentSpecificAlarmMapper
;
import
com.yeejoin.equipmanage.mapper.EquipmentSpecificMapper
;
import
com.yeejoin.equipmanage.mapper.FireFightingSystemMapper
;
import
com.yeejoin.equipmanage.common.vo.*
;
import
com.yeejoin.equipmanage.fegin.JcsFeign
;
import
com.yeejoin.equipmanage.mapper.*
;
import
com.yeejoin.equipmanage.service.*
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.domain.PageImpl
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.ObjectUtils
;
import
javax.servlet.http.HttpServletResponse
;
import
java.net.Inet4Address
;
import
java.net.InetAddress
;
import
java.net.NetworkInterface
;
import
java.net.SocketException
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.time.LocalDateTime
;
import
java.time.ZoneId
;
import
java.time.format.DateTimeFormatter
;
import
java.time.temporal.TemporalAccessor
;
import
java.util.*
;
/**
* @author DELL
...
...
@@ -133,7 +117,7 @@ public class EquipmentSpecificAlarmServiceImpl extends ServiceImpl<EquipmentSpec
alarmDownloadVO
.
setEquipCode
(
StringUtil
.
isNotEmpty
(
alarm
.
get
(
"fireEquipmentCode"
))
?
alarm
.
get
(
"fireEquipmentCode"
).
toString
()
:
""
);
alarmDownloadVO
.
setAlarmPosition
(
StringUtil
.
isNotEmpty
(
alarm
.
get
(
"warehouseStructureName"
))
?
alarm
.
get
(
"warehouseStructureName"
).
toString
()
:
""
);
alarmDownloadVO
.
setProtectObj
(
StringUtil
.
isNotEmpty
(
alarm
.
get
(
"equipmentName"
))
?
alarm
.
get
(
"equipmentName"
).
toString
()
:
""
);
alarmDownloadVO
.
setAlarmTime
(
StringUtil
.
isNotEmpty
(
alarm
.
get
(
"createDate"
))
?
alarm
.
get
(
"createDate"
).
toString
().
replace
(
"T"
,
" "
)
:
""
);
alarmDownloadVO
.
setAlarmTime
(
StringUtil
.
isNotEmpty
(
alarm
.
get
(
"createDate"
))
?
alarm
.
get
(
"createDate"
).
toString
().
replace
(
"T"
,
" "
)
:
""
);
alarmDownloadVO
.
setCleanStatus
(
alarm
.
get
(
"cleanStatus"
).
toString
());
// 处理状态、处理类型无业务字段,后期业务功能实现之后需在此处返回相应字段
alarmDownloadVO
.
setHandleStatus
(
String
.
valueOf
(
alarm
.
get
(
"handleStatus"
)));
...
...
@@ -145,7 +129,7 @@ public class EquipmentSpecificAlarmServiceImpl extends ServiceImpl<EquipmentSpec
?
handleType
:
signalClassifyService
.
getTypeNameByCode
(
String
.
valueOf
(
alarm
.
get
(
"handleType"
))).
getTypeName
());
}
alarmDownloadVO
.
setResolveResult
(
StringUtil
.
isNotEmpty
(
alarm
.
get
(
"resolveResult"
))
?
alarm
.
get
(
"resolveResult"
).
toString
()
:
""
);
alarmDownloadVO
.
setConfirmDate
(
StringUtil
.
isNotEmpty
(
alarm
.
get
(
"confirmDate"
))
?
alarm
.
get
(
"confirmDate"
).
toString
().
replace
(
"T"
,
" "
)
:
""
);
alarmDownloadVO
.
setConfirmDate
(
StringUtil
.
isNotEmpty
(
alarm
.
get
(
"confirmDate"
))
?
alarm
.
get
(
"confirmDate"
).
toString
().
replace
(
"T"
,
" "
)
:
""
);
alarmDownloadVO
.
setAlarmReason
(
StringUtil
.
isNotEmpty
(
alarm
.
get
(
"alarmReason"
))
?
alarm
.
get
(
"alarmReason"
).
toString
()
:
""
);
equipmentDownloads
.
add
(
alarmDownloadVO
);
}
...
...
@@ -165,7 +149,7 @@ public class EquipmentSpecificAlarmServiceImpl extends ServiceImpl<EquipmentSpec
alarmDownloadVO
.
setEquipCode
(
StringUtil
.
isNotEmpty
(
alarm
.
get
(
"fireEquipmentCode"
))
?
alarm
.
get
(
"fireEquipmentCode"
).
toString
()
:
""
);
alarmDownloadVO
.
setAlarmPosition
(
StringUtil
.
isNotEmpty
(
alarm
.
get
(
"warehouseStructureName"
))
?
alarm
.
get
(
"warehouseStructureName"
).
toString
()
:
""
);
alarmDownloadVO
.
setProtectObj
(
StringUtil
.
isNotEmpty
(
alarm
.
get
(
"equipmentName"
))
?
alarm
.
get
(
"equipmentName"
).
toString
()
:
""
);
alarmDownloadVO
.
setAlarmTime
(
StringUtil
.
isNotEmpty
(
alarm
.
get
(
"createDate"
))
?
alarm
.
get
(
"createDate"
).
toString
().
replace
(
"T"
,
" "
)
:
""
);
alarmDownloadVO
.
setAlarmTime
(
StringUtil
.
isNotEmpty
(
alarm
.
get
(
"createDate"
))
?
alarm
.
get
(
"createDate"
).
toString
().
replace
(
"T"
,
" "
)
:
""
);
alarmDownloadVO
.
setCleanStatus
(
alarm
.
get
(
"cleanStatus"
).
toString
());
// 处理状态、处理类型无业务字段,后期业务功能实现之后需在此处返回相应字段
alarmDownloadVO
.
setHandleStatus
(
String
.
valueOf
(
alarm
.
get
(
"handleStatus"
)));
...
...
@@ -177,7 +161,7 @@ public class EquipmentSpecificAlarmServiceImpl extends ServiceImpl<EquipmentSpec
?
handleType
:
signalClassifyService
.
getTypeNameByCode
(
String
.
valueOf
(
alarm
.
get
(
"handleType"
))).
getTypeName
());
}
alarmDownloadVO
.
setResolveResult
(
StringUtil
.
isNotEmpty
(
alarm
.
get
(
"resolveResult"
))
?
alarm
.
get
(
"resolveResult"
).
toString
()
:
""
);
alarmDownloadVO
.
setConfirmDate
(
StringUtil
.
isNotEmpty
(
alarm
.
get
(
"confirmDate"
))
?
alarm
.
get
(
"confirmDate"
).
toString
().
replace
(
"T"
,
" "
)
:
""
);
alarmDownloadVO
.
setConfirmDate
(
StringUtil
.
isNotEmpty
(
alarm
.
get
(
"confirmDate"
))
?
alarm
.
get
(
"confirmDate"
).
toString
().
replace
(
"T"
,
" "
)
:
""
);
alarmDownloadVO
.
setAlarmReason
(
StringUtil
.
isNotEmpty
(
alarm
.
get
(
"alarmReason"
))
?
alarm
.
get
(
"alarmReason"
).
toString
()
:
""
);
equipmentDownloads
.
add
(
alarmDownloadVO
);
});
...
...
@@ -215,6 +199,12 @@ public class EquipmentSpecificAlarmServiceImpl extends ServiceImpl<EquipmentSpec
}
@Override
public
Page
<
Map
<
String
,
Object
>>
pageQuery
(
CommonPageInfoParam
param
)
{
Page
result
=
new
Page
<>(
param
.
getPageNumber
(),
param
.
getPageSize
());
return
this
.
baseMapper
.
pageQuery
(
result
,
param
);
}
@Override
public
org
.
springframework
.
data
.
domain
.
Page
<
AlarmListDataVO
>
listAlarmsPage
(
CommonPageInfoParam
param
)
{
Page
page
=
new
Page
(
param
.
getPageNumber
(),
param
.
getPageSize
());
// page.setCurrent(param.getPageNumber() == 1 ? 0 : param.getPageNumber());
...
...
@@ -227,7 +217,7 @@ public class EquipmentSpecificAlarmServiceImpl extends ServiceImpl<EquipmentSpec
AlarmListDataVO
dataVO
=
new
AlarmListDataVO
();
try
{
DateTimeFormatter
df
=
DateTimeFormatter
.
ofPattern
(
DateUtils
.
DATE_TIME_PATTERN
);
String
time
=
df
.
format
((
TemporalAccessor
)
x
.
get
(
"createDate"
));
String
time
=
df
.
format
((
TemporalAccessor
)
x
.
get
(
"createDate"
));
Date
date
=
DateUtils
.
dateParse
(
time
,
DateUtils
.
DATE_TIME_PATTERN
);
dataVO
.
setAlarmTime
(
date
);
}
catch
(
ParseException
e
)
{
...
...
@@ -260,7 +250,7 @@ public class EquipmentSpecificAlarmServiceImpl extends ServiceImpl<EquipmentSpec
mybatisResult
.
getRecords
().
forEach
(
x
->
{
TopographyAlarmVo
dataVO
=
new
TopographyAlarmVo
();
try
{
dataVO
.
setCreateDate
(
DateUtils
.
dateParse
(
String
.
valueOf
(
x
.
get
(
"createDate"
)),
DateUtils
.
DATE_TIME_T_PATTERN
));
dataVO
.
setCreateDate
(
DateUtils
.
dateParse
(
String
.
valueOf
(
x
.
get
(
"createDate"
)),
DateUtils
.
DATE_TIME_T_PATTERN
));
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
...
...
@@ -632,15 +622,15 @@ public class EquipmentSpecificAlarmServiceImpl extends ServiceImpl<EquipmentSpec
public
List
<
EquipmentSpecificAlarmLog
>
getConfirmUser
()
{
List
<
EquipmentSpecificAlarmLog
>
equipSpecificAlarmDTOList
=
equipmentSpecificAlarmMapper
.
getConfirmUser
();
List
<
String
>
confirmUser
=
new
ArrayList
<>();
equipSpecificAlarmDTOList
.
forEach
(
e
->
confirmUser
.
add
(
e
.
getConfirmUser
()));
equipSpecificAlarmDTOList
.
forEach
(
e
->
confirmUser
.
add
(
e
.
getConfirmUser
()));
List
<
OrgUsrDto
>
result
=
jcsFeign
.
getByAmosId
(
confirmUser
).
getResult
();
equipSpecificAlarmDTOList
.
stream
().
forEach
(
e
->
{
result
.
forEach
(
a
->
{
if
(
a
.
getAmosOrgId
().
equals
(
e
.
getConfirmUser
()))
{
equipSpecificAlarmDTOList
.
stream
().
forEach
(
e
->
{
result
.
forEach
(
a
->
{
if
(
a
.
getAmosOrgId
().
equals
(
e
.
getConfirmUser
()))
{
e
.
setJcsConfirmUserName
(
a
.
getBizOrgName
());
}
});
if
(
e
.
getJcsConfirmUserName
()
==
null
||
e
.
getJcsConfirmUserName
()
.
equals
(
""
))
{
if
(
e
.
getJcsConfirmUserName
()
==
null
||
e
.
getJcsConfirmUserName
()
.
equals
(
""
))
{
e
.
setJcsConfirmUserName
(
e
.
getConfirmUserName
());
}
});
...
...
amos-boot-system-equip/src/main/resources/mapper/EquipmentSpecificAlarmMapper.xml
View file @
de333899
...
...
@@ -257,6 +257,32 @@
ORDER BY wlesal.create_date DESC
</select>
<select
id=
"pageQuery"
resultType=
"java.util.HashMap"
>
SELECT
`wlesal`.`id` AS `id`,
`wles`.`code` AS `code`,
`wlesal`.`equipment_specific_name` AS `specificName`,
`wlesal`.`equipment_specific_index_key` AS `indexKey`,
`wlesal`.`equipment_specific_index_name` AS `indexName`,
`wlesal`.`equipment_specific_id` AS `specificId`,
IF
( `wlesal`.`clean_time` IS NOT NULL, '已消除', '未消除' ) AS `cleanStatus`,
`wlesal`.`iot_code` AS `iotCode`,
`wlesal`.`create_date` AS `createDate`
FROM
`wl_equipment_specific_alarm_log` `wlesal`
LEFT JOIN `wl_equipment_specific` `wles` ON `wlesal`.`equipment_specific_id` = `wles`.`id`
<where>
<if
test=
"param.system != null and param.system != ''"
>
find_in_set( #{param.system}, `wlesal`.`system_codes` )
</if>
<if
test=
"param.bizOrgCode != null and param.bizOrgCode != ''"
>
AND wles.biz_org_code like concat (#{param.bizOrgCode},'%')
</if>
</where>
ORDER BY
`wlesal`.`create_date` DESC
</select>
<select
id=
"pageAlarmsInfo"
resultType=
"Map"
>
SELECT
d.*
...
...
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