Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
cloud-fb
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
王衍超
cloud-fb
Commits
6dd5d491
Commit
6dd5d491
authored
Apr 23, 2021
by
王衍超
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
调整预警代码结构;
parent
0591eacc
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
165 additions
and
70 deletions
+165
-70
SandMiningAreaConstant.java
...a/com/xyst/dinas/biz/constant/SandMiningAreaConstant.java
+32
-0
SandMiningAreaServiceImpl.java
...dinas/biz/internal/service/SandMiningAreaServiceImpl.java
+15
-13
WarnSettingConstant.java
...ain/java/com/xyst/dinas/biz/warn/WarnSettingConstant.java
+0
-24
AdvanceBalanceWarningCalculator.java
.../dinas/contract/warn/AdvanceBalanceWarningCalculator.java
+11
-1
ContractExpireWarningCalculator.java
.../dinas/contract/warn/ContractExpireWarningCalculator.java
+8
-1
SandMiningConfiguration.java
...xyst/dinas/production/config/SandMiningConfiguration.java
+11
-4
SandWarningExeProcessor.java
...st/dinas/production/internal/SandWarningExeProcessor.java
+10
-11
DischargingServiceImpl.java
...s/production/internal/service/DischargingServiceImpl.java
+1
-1
SandMiningServiceImpl.java
...as/production/internal/service/SandMiningServiceImpl.java
+18
-15
SandAreaDinasCountWarningCalculator.java
...uction/processor/SandAreaDinasCountWarningCalculator.java
+59
-0
No files found.
backend/xyst.dinas.biz/src/main/java/com/xyst/dinas/biz/constant/SandMiningAreaConstant.java
View file @
6dd5d491
...
...
@@ -7,4 +7,36 @@ public interface SandMiningAreaConstant {
*/
String
ENTITY
=
"com.xyst.dinas.biz.datamodel.SandMiningArea"
;
/**************采砂预警**************/
/** 预警计算器*/
String
warnCalculator
=
"com.xyst.dinas.production.processor.SandAreaDinasCountWarningCalculator"
;
/**
* 超采预警类型
*/
public
static
final
String
SAND_MINING_AREA_BILL_TYPE
=
"采区超采预警"
;
/**
* 超采预警指标 -开采量
*/
public
static
final
String
SAND_MINING_AREA_WARN_TARGET
=
"开采量"
;
/**
* 许可证船只进入告警区类型
*/
public
static
final
String
SAND_SHIP_WARN_BILL_TYPE
=
"采区船只报警"
;
/**
* 许可证船只进入告警区指标-进入告警区
*/
public
static
final
String
SAND_SHIP_WARN_TARGET_ENTER_WARNING_AREA
=
"进入告警区"
;
/**
* 许可证船只进入告警区指标-非作业时间进入采砂区
*/
public
static
final
String
SAND_SHIP_WARN_TARGET_NO_OPERATING_HOURS
=
"非作业时间进入采砂区"
;
}
backend/xyst.dinas.biz/src/main/java/com/xyst/dinas/biz/internal/service/SandMiningAreaServiceImpl.java
View file @
6dd5d491
package
com
.
xyst
.
dinas
.
biz
.
internal
.
service
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.UUID
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.json.JSONObject
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.transaction.annotation.Transactional
;
import
com.beecode.bap.attachment.common.Page
;
import
com.beecode.bcp.type.KObject
;
import
com.xyst.dinas.biz.constant.SandMiningAreaConstant
;
import
com.xyst.dinas.biz.dao.SandMiningAreaDao
;
import
com.xyst.dinas.biz.service.SandMiningAreaService
;
import
com.xyst.dinas.biz.warn.WarnSetting
;
...
...
@@ -10,16 +21,6 @@ import com.xyst.dinas.biz.warn.WarnSettingEntity;
import
com.xyst.dinas.biz.warn.WarnTargetTypeEnum
;
import
com.xyst.dinas.biz.warn.service.WarningService
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.json.JSONObject
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.UUID
;
/**
* @author scol
*/
...
...
@@ -75,12 +76,13 @@ public class SandMiningAreaServiceImpl implements SandMiningAreaService {
if
(
2
==
kobject
.
getInt
(
"status"
)){
//新建采区后同步新建一条预警设置
WarnSettingEntity
warnSetting
=
new
WarnSettingEntity
();
warnSetting
.
setBillType
(
WarnSetting
Constant
.
SAND_MINING_AREA_BILL_TYPE
);
warnSetting
.
setBillType
(
SandMiningArea
Constant
.
SAND_MINING_AREA_BILL_TYPE
);
warnSetting
.
setBillId
(
kobject
.
getUuid
(
"id"
));
warnSetting
.
setTarget
(
WarnSetting
Constant
.
SAND_MINING_AREA_WARN_TARGET
);
warnSetting
.
setTarget
(
SandMiningArea
Constant
.
SAND_MINING_AREA_WARN_TARGET
);
warnSetting
.
setTargetType
(
WarnTargetTypeEnum
.
NUMBER_TYPE
.
name
());
warnSetting
.
setOpen
(
false
);
warnSetting
.
setMemo
(
getAreaWarningInfo
(
kobject
));
warnSetting
.
setWarnCalculator
(
SandMiningAreaConstant
.
warnCalculator
);
warningSettingService
.
insertWarnSetting
(
warnSetting
);
}
}
...
...
@@ -88,7 +90,7 @@ public class SandMiningAreaServiceImpl implements SandMiningAreaService {
@Override
public
void
deleteById
(
UUID
id
)
{
sandMiningAreaDao
.
deleteById
(
id
);
WarnSetting
warnSetting
=
warningSettingService
.
getWarnSetting
(
WarnSettingConstant
.
SAND_MINING_AREA_BILL_TYPE
,
id
,
WarnSetting
Constant
.
SAND_MINING_AREA_WARN_TARGET
);
WarnSetting
warnSetting
=
warningSettingService
.
getWarnSetting
(
SandMiningAreaConstant
.
SAND_MINING_AREA_BILL_TYPE
,
id
,
SandMiningArea
Constant
.
SAND_MINING_AREA_WARN_TARGET
);
warningSettingService
.
deleteWarnSetting
(
warnSetting
.
getSettingId
());
warningSettingService
.
endWarnStateBySettingId
(
warnSetting
.
getSettingId
());
}
...
...
backend/xyst.dinas.biz/src/main/java/com/xyst/dinas/biz/warn/WarnSettingConstant.java
View file @
6dd5d491
...
...
@@ -47,30 +47,6 @@ public class WarnSettingConstant {
public
static
final
String
ACTUAL_VALUE
=
"actualValue"
;
/**
* 超采预警类型
*/
public
static
final
String
SAND_MINING_AREA_BILL_TYPE
=
"采区超采预警"
;
/**
* 超采预警指标 -开采量
*/
public
static
final
String
SAND_MINING_AREA_WARN_TARGET
=
"开采量"
;
/**
* 许可证船只进入告警区类型
*/
public
static
final
String
SAND_SHIP_WARN_BILL_TYPE
=
"采区船只报警"
;
/**
* 许可证船只进入告警区指标-进入告警区
*/
public
static
final
String
SAND_SHIP_WARN_TARGET_ENTER_WARNING_AREA
=
"进入告警区"
;
/**
* 许可证船只进入告警区指标-非作业时间进入采砂区
*/
public
static
final
String
SAND_SHIP_WARN_TARGET_NO_OPERATING_HOURS
=
"非作业时间进入采砂区"
;
...
...
backend/xyst.dinas.contract/src/main/java/com/xyst/dinas/contract/warn/AdvanceBalanceWarningCalculator.java
View file @
6dd5d491
package
com
.
xyst
.
dinas
.
contract
.
warn
;
import
java.util.List
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
com.beecode.bcp.type.KObject
;
import
com.xyst.dinas.biz.constant.DinasTypeConstant
;
import
com.xyst.dinas.biz.warn.IWarningCalculator
;
import
com.xyst.dinas.biz.warn.WarnSetting
;
import
com.xyst.dinas.contract.constant.ContractConstant
;
import
com.xyst.dinas.contract.service.ContractService
;
/**
...
...
@@ -24,7 +29,12 @@ public class AdvanceBalanceWarningCalculator implements IWarningCalculator{
@Override
public
boolean
isWarning
(
WarnSetting
warnSetting
)
{
//TODO
String
min
=
warnSetting
.
getMin
();
String
target
=
warnSetting
.
getTarget
();
if
(
min
==
null
||
min
.
trim
().
length
()==
0
)
return
false
;
KObject
contract
=
contractService
.
queryContract
(
warnSetting
.
getBillId
());
advanceBalance
=
contract
.
getDouble
(
ContractConstant
.
ADVANCE_BALANCE
);
return
false
;
}
...
...
backend/xyst.dinas.contract/src/main/java/com/xyst/dinas/contract/warn/ContractExpireWarningCalculator.java
View file @
6dd5d491
...
...
@@ -2,8 +2,10 @@ package com.xyst.dinas.contract.warn;
import
org.springframework.beans.factory.annotation.Autowired
;
import
com.beecode.bcp.type.KObject
;
import
com.xyst.dinas.biz.warn.IWarningCalculator
;
import
com.xyst.dinas.biz.warn.WarnSetting
;
import
com.xyst.dinas.contract.constant.ContractConstant
;
import
com.xyst.dinas.contract.service.ContractService
;
/**
...
...
@@ -24,7 +26,12 @@ public class ContractExpireWarningCalculator implements IWarningCalculator{
@Override
public
boolean
isWarning
(
WarnSetting
warnSetting
)
{
//TODO
String
min
=
warnSetting
.
getMin
();
String
target
=
warnSetting
.
getTarget
();
if
(
min
==
null
||
min
.
trim
().
length
()==
0
)
return
false
;
KObject
contract
=
contractService
.
queryContract
(
warnSetting
.
getBillId
());
advanceBalance
=
contract
.
getDouble
(
ContractConstant
.
ADVANCE_BALANCE
);
return
false
;
}
...
...
backend/xyst.dinas.production/src/main/java/com/xyst/dinas/production/config/SandMiningConfiguration.java
View file @
6dd5d491
package
com
.
xyst
.
dinas
.
production
.
config
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.core.io.ClassPathResource
;
import
com.beecode.amino.metadata.runtime.MetadataMech
;
import
com.beecode.bcp.type.KClass
;
import
com.beecode.bcp.type.TypeConstants
;
...
...
@@ -8,16 +13,13 @@ import com.xyst.dinas.production.internal.SandShipWarnSettingProcessor;
import
com.xyst.dinas.production.internal.SandWarningExeProcessor
;
import
com.xyst.dinas.production.internal.dao.SandMiningDaoImpl
;
import
com.xyst.dinas.production.internal.service.SandMiningServiceImpl
;
import
com.xyst.dinas.production.processor.SandAreaDinasCountWarningCalculator
;
import
com.xyst.dinas.production.service.SandMiningService
;
import
com.xyst.dinas.production.task.SandMiningExpiredSchedule
;
import
com.xyst.dinas.production.task.SandMiningExpiredTask
;
import
com.xyst.dinas.production.task.WarehousingStatusExpiredSchedule
;
import
com.xyst.dinas.production.task.WarehousingTask
;
import
com.xyst.dinas.production.web.SandMiningController
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.core.io.ClassPathResource
;
public
class
SandMiningConfiguration
{
...
...
@@ -80,5 +82,10 @@ public class SandMiningConfiguration {
public
SandWarningExeProcessor
sandWarningExeProcessor
()
{
return
new
SandWarningExeProcessor
();
}
@Bean
(
"com.xyst.dinas.production.processor.SandAreaDinasCountWarningCalculator"
)
public
SandAreaDinasCountWarningCalculator
sandAreaDinasCountWarningCalculator
()
{
return
new
SandAreaDinasCountWarningCalculator
();
}
}
backend/xyst.dinas.production/src/main/java/com/xyst/dinas/production/internal/SandWarningExeProcessor.java
View file @
6dd5d491
package
com
.
xyst
.
dinas
.
production
.
internal
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.UUID
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
com.beecode.bap.staff.service.StaffService
;
import
com.beecode.bcp.type.KObject
;
import
com.beecode.inz.query.entity.RowData
;
import
com.beecode.inz.query.processor.DataProcessor
;
import
com.beecode.inz.query.processor.DataProcessorContext
;
import
com.xyst.dinas.biz.constant.SandMiningAreaConstant
;
import
com.xyst.dinas.biz.service.SandMiningAreaService
;
import
com.xyst.dinas.biz.warn.WarnSetting
;
import
com.xyst.dinas.biz.warn.WarnSettingConstant
;
import
com.xyst.dinas.biz.warn.WarningServiceImpl
;
import
com.xyst.dinas.biz.warn.service.WarningService
;
import
com.xyst.dinas.production.service.SandMiningService
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.util.Assert
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.UUID
;
/**
* @author scol
...
...
@@ -45,14 +44,14 @@ public class SandWarningExeProcessor implements DataProcessor {
String
warnSettingId
=
row
.
get
(
"warnSetting.id"
).
toString
();
WarnSetting
warnSetting
=
warningSettingService
.
getWarnSetting
(
UUID
.
fromString
(
warnSettingId
));
String
billType
=
warnSetting
.
getBillType
();
if
(
WarnSetting
Constant
.
SAND_MINING_AREA_BILL_TYPE
.
equals
(
billType
)){
if
(
SandMiningArea
Constant
.
SAND_MINING_AREA_BILL_TYPE
.
equals
(
billType
)){
KObject
byId
=
sandMiningAreaService
.
getById
(
billId
);
sandAreaName
=
byId
.
getString
(
"sandMiningAreaName"
);
shipName
=
"-"
;
regionalCompanyName
=
byId
.
get
(
"regionalCompany"
).
getString
(
"name"
);
row
.
put
(
"detail"
,
warnSetting
.
getMax
());
}
else
if
(
WarnSetting
Constant
.
SAND_SHIP_WARN_BILL_TYPE
.
equals
(
billType
)){
}
else
if
(
SandMiningArea
Constant
.
SAND_SHIP_WARN_BILL_TYPE
.
equals
(
billType
)){
KObject
sandMining
=
sandMiningService
.
getById
(
billId
);
sandAreaName
=
sandMining
.
get
(
"sandMiningArea"
).
getString
(
"sandMiningAreaName"
);
shipName
=
sandMining
.
get
(
"ship"
).
getString
(
"shipName"
);
...
...
backend/xyst.dinas.production/src/main/java/com/xyst/dinas/production/internal/service/DischargingServiceImpl.java
View file @
6dd5d491
...
...
@@ -108,7 +108,7 @@ public class DischargingServiceImpl implements DischargingService {
Double
allDischargingWeightByYearAndSandAreaId
=
dischargingDao
.
getAllDischargingWeightByYearAndSandAreaId
(
dischargingTime
,
billId
);
SandAreaDinasCountWarningCalculate
sandAreaDinasCountWarningCalculate
=
new
SandAreaDinasCountWarningCalculate
(
allDischargingWeightByYearAndSandAreaId
,
sandMiningArea
.
getString
(
"sandMiningAreaName"
));
BaseBusinessWarn
businessWarn
=
warningService
.
createWarn
(
WarnSettingConstant
.
SAND_MINING_AREA_BILL_TYPE
,
billId
,
WarnSetting
Constant
.
SAND_MINING_AREA_WARN_TARGET
);
BaseBusinessWarn
businessWarn
=
warningService
.
createWarn
(
SandMiningAreaConstant
.
SAND_MINING_AREA_BILL_TYPE
,
billId
,
SandMiningArea
Constant
.
SAND_MINING_AREA_WARN_TARGET
);
businessWarn
.
setWarningCalculate
(
sandAreaDinasCountWarningCalculate
);
businessWarn
.
warn
();
}
...
...
backend/xyst.dinas.production/src/main/java/com/xyst/dinas/production/internal/service/SandMiningServiceImpl.java
View file @
6dd5d491
package
com
.
xyst
.
dinas
.
production
.
internal
.
service
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.UUID
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.json.JSONObject
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.transaction.annotation.Transactional
;
import
com.beecode.bap.attachment.common.Page
;
import
com.beecode.bcp.type.KObject
;
import
com.xyst.dinas.biz.constant.SandMiningAreaConstant
;
import
com.xyst.dinas.biz.warn.WarnSetting
;
import
com.xyst.dinas.biz.warn.WarnSettingConstant
;
import
com.xyst.dinas.biz.warn.WarnSettingEntity
;
import
com.xyst.dinas.biz.warn.service.WarningService
;
import
com.xyst.dinas.production.dao.SandMiningDao
;
import
com.xyst.dinas.production.service.SandMiningService
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.json.JSONObject
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.UUID
;
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
class
SandMiningServiceImpl
implements
SandMiningService
{
...
...
@@ -39,19 +40,21 @@ public class SandMiningServiceImpl implements SandMiningService {
UUID
uuid
=
sandMiningDao
.
create
(
kObject
);
//新增采砂船非工作时间预警和采砂船非自己采区预警
WarnSettingEntity
warnSetting
=
new
WarnSettingEntity
();
warnSetting
.
setBillType
(
WarnSetting
Constant
.
SAND_SHIP_WARN_BILL_TYPE
);
warnSetting
.
setBillType
(
SandMiningArea
Constant
.
SAND_SHIP_WARN_BILL_TYPE
);
warnSetting
.
setBillId
(
uuid
);
warnSetting
.
setTarget
(
WarnSetting
Constant
.
SAND_SHIP_WARN_TARGET_ENTER_WARNING_AREA
);
warnSetting
.
setTarget
(
SandMiningArea
Constant
.
SAND_SHIP_WARN_TARGET_ENTER_WARNING_AREA
);
warnSetting
.
setOpen
(
false
);
warnSetting
.
setMemo
(
getSandShipInfo
(
kObject
));
warnSetting
.
setWarnCalculator
(
SandMiningAreaConstant
.
warnCalculator
);
warningSettingService
.
insertWarnSetting
(
warnSetting
);
WarnSettingEntity
warnSetting1
=
new
WarnSettingEntity
();
warnSetting1
.
setBillType
(
WarnSetting
Constant
.
SAND_SHIP_WARN_BILL_TYPE
);
warnSetting1
.
setBillType
(
SandMiningArea
Constant
.
SAND_SHIP_WARN_BILL_TYPE
);
warnSetting1
.
setBillId
(
uuid
);
warnSetting1
.
setTarget
(
WarnSetting
Constant
.
SAND_SHIP_WARN_TARGET_NO_OPERATING_HOURS
);
warnSetting1
.
setTarget
(
SandMiningArea
Constant
.
SAND_SHIP_WARN_TARGET_NO_OPERATING_HOURS
);
warnSetting1
.
setOpen
(
false
);
warnSetting1
.
setMemo
(
getSandShipInfo
(
kObject
));
warnSetting1
.
setWarnCalculator
(
SandMiningAreaConstant
.
warnCalculator
);
warningSettingService
.
insertWarnSetting
(
warnSetting1
);
return
uuid
;
...
...
@@ -89,13 +92,13 @@ public class SandMiningServiceImpl implements SandMiningService {
//删除预警设置 结束预警记录
//进入告警区的
WarnSetting
warnSetting
=
warningSettingService
.
getWarnSetting
(
WarnSettingConstant
.
SAND_SHIP_WARN_BILL_TYPE
,
id
,
WarnSetting
Constant
.
SAND_SHIP_WARN_TARGET_ENTER_WARNING_AREA
);
WarnSetting
warnSetting
=
warningSettingService
.
getWarnSetting
(
SandMiningAreaConstant
.
SAND_SHIP_WARN_BILL_TYPE
,
id
,
SandMiningArea
Constant
.
SAND_SHIP_WARN_TARGET_ENTER_WARNING_AREA
);
if
(
null
!=
warnSetting
){
warningSettingService
.
deleteWarnSetting
(
warnSetting
.
getSettingId
());
warningSettingService
.
endWarnStateBySettingId
(
warnSetting
.
getSettingId
());
}
//非作业时间采砂的
WarnSetting
warnSetting1
=
warningSettingService
.
getWarnSetting
(
WarnSettingConstant
.
SAND_SHIP_WARN_BILL_TYPE
,
id
,
WarnSetting
Constant
.
SAND_SHIP_WARN_TARGET_NO_OPERATING_HOURS
);
WarnSetting
warnSetting1
=
warningSettingService
.
getWarnSetting
(
SandMiningAreaConstant
.
SAND_SHIP_WARN_BILL_TYPE
,
id
,
SandMiningArea
Constant
.
SAND_SHIP_WARN_TARGET_NO_OPERATING_HOURS
);
if
(
null
!=
warnSetting1
){
warningSettingService
.
deleteWarnSetting
(
warnSetting1
.
getSettingId
());
warningSettingService
.
endWarnStateBySettingId
(
warnSetting1
.
getSettingId
());
...
...
backend/xyst.dinas.production/src/main/java/com/xyst/dinas/production/processor/SandAreaDinasCountWarningCalculator.java
0 → 100644
View file @
6dd5d491
package
com
.
xyst
.
dinas
.
production
.
processor
;
import
com.xyst.dinas.biz.warn.IWarningCalculator
;
import
com.xyst.dinas.biz.warn.WarnSetting
;
/**
* 上岸量比较
*
* @author
* @date 2021年4月23日
*/
public
class
SandAreaDinasCountWarningCalculator
implements
IWarningCalculator
{
/**上岸量
*
*/
private
double
dischargingWeight
;
private
String
sandAreaName
;
private
String
warnMessage
;
@Override
public
boolean
isWarning
(
WarnSetting
warnSetting
)
{
String
max
=
warnSetting
.
getMax
();
String
target
=
warnSetting
.
getTarget
();
if
(
max
==
null
||
max
.
trim
().
length
()==
0
)
{
return
false
;
}
//TODO
return
false
;
}
public
double
getDinasCount
()
{
return
dischargingWeight
;
}
public
void
setDinasCount
(
double
dinasCount
)
{
this
.
dischargingWeight
=
dinasCount
;
}
@Override
public
String
warnMessage
()
{
return
warnMessage
;
}
@Override
public
String
getActualValue
()
{
return
dischargingWeight
+
""
;
}
}
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