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
c3ad2420
Commit
c3ad2420
authored
Jun 03, 2025
by
韩桐桐
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug-28712:设备移交,使用单位多次移交给安装单位显示设备已被其他流程使用,不允许重复提交
parent
5ce52eef
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
137 additions
and
119 deletions
+137
-119
JgEquipTransferServiceImpl.java
...odule/jg/biz/service/impl/JgEquipTransferServiceImpl.java
+137
-119
No files found.
amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-biz/src/main/java/com/yeejoin/amos/boot/module/jg/biz/service/impl/JgEquipTransferServiceImpl.java
View file @
c3ad2420
...
...
@@ -26,7 +26,9 @@ import com.yeejoin.amos.boot.module.jg.api.service.IJgEquipTransferService;
import
com.yeejoin.amos.boot.module.jg.api.service.IJgInstallationNoticeService
;
import
com.yeejoin.amos.boot.module.jg.api.vo.SortVo
;
import
com.yeejoin.amos.boot.module.jg.api.vo.tableDataExportVo.EquipTransferVo
;
import
com.yeejoin.amos.boot.module.jg.biz.config.LocalBadRequest
;
import
com.yeejoin.amos.boot.module.jg.biz.context.EquipUsedCheckStrategyContext
;
import
com.yeejoin.amos.boot.module.jg.biz.context.FlowingEquipRedisContext
;
import
com.yeejoin.amos.boot.module.jg.biz.edit.permission.FillingEditPermForCurrentUser
;
import
com.yeejoin.amos.boot.module.jg.biz.feign.TzsServiceFeignClient
;
import
com.yeejoin.amos.boot.module.jg.biz.service.ICompensateFlowDataOfRedis
;
...
...
@@ -116,140 +118,156 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
@GlobalTransactional
(
rollbackFor
=
Exception
.
class
)
public
List
<
JgEquipTransfer
>
saveTransfer
(
String
submitType
,
JSONObject
jsonObjectMap
,
ReginParams
reginParams
)
{
JgEquipTransferDto
model
=
JSON
.
parseObject
(
JSONObject
.
toJSONString
(
jsonObjectMap
),
JgEquipTransferDto
.
class
);
convertField
(
model
);
String
equListCode
=
model
.
getEquList
();
List
<
Map
<
String
,
Object
>>
deviceList
=
model
.
getDeviceList
();
if
(
CollectionUtils
.
isEmpty
(
deviceList
))
{
throw
new
BadRequest
(
"请选择设备!"
);
}
if
(
SUBMIT_TYPE_FLOW
.
equals
(
submitType
))
{
// 放在最后面防止前面有异常
// 如果是提交,用于校验设备是否已经在流程中,如果不在标记设备已经在流程中
CompanyBo
company
=
reginParams
.
getCompany
();
if
(
EquipmentClassifityEnum
.
YLGD
.
getCode
().
equals
(
equListCode
))
{
deviceList
.
forEach
(
proCon
->
{
String
proConSeq
=
String
.
valueOf
(
proCon
.
get
(
sequenceNbr
));
List
<
Map
<
String
,
Object
>>
equipList
=
jgProjectContraptionService
.
getBaseMapper
().
selectEquipList
(
proConSeq
);
equipList
.
forEach
(
equip
->
EquipUsedCheckStrategyContext
.
getUsedStrategy
(
EQUIP_TRANSFER_PROCESS_KEY
)
.
equipRepeatUsedCheck
(
String
.
valueOf
(
equip
.
get
(
record
)),
CompanyTypeEnum
.
INDIVIDUAL
.
getName
().
equals
(
company
.
getCompanyType
())
?
try
{
if
(
SUBMIT_TYPE_FLOW
.
equals
(
submitType
))
{
// 放在最后面防止前面有异常
// 如果是提交,用于校验设备是否已经在流程中,如果不在标记设备已经在流程中
CompanyBo
company
=
reginParams
.
getCompany
();
if
(
EquipmentClassifityEnum
.
YLGD
.
getCode
().
equals
(
equListCode
))
{
deviceList
.
forEach
(
proCon
->
{
String
proConSeq
=
String
.
valueOf
(
proCon
.
get
(
sequenceNbr
));
List
<
Map
<
String
,
Object
>>
equipList
=
jgProjectContraptionService
.
getBaseMapper
().
selectEquipList
(
proConSeq
);
equipList
.
forEach
(
equip
->
EquipUsedCheckStrategyContext
.
getUsedStrategy
(
EQUIP_TRANSFER_PROCESS_KEY
)
.
equipRepeatUsedCheck
(
String
.
valueOf
(
equip
.
get
(
record
)),
CompanyTypeEnum
.
INDIVIDUAL
.
getName
().
equals
(
company
.
getCompanyType
())
?
company
.
getCompanyCode
().
split
(
"_"
)[
1
]
:
company
.
getCompanyCode
()));
});
}
else
{
deviceList
.
forEach
(
device
->
EquipUsedCheckStrategyContext
.
getUsedStrategy
(
EQUIP_TRANSFER_PROCESS_KEY
)
.
equipRepeatUsedCheck
(
String
.
valueOf
(
device
.
get
(
"SEQUENCE_NBR"
)),
CompanyTypeEnum
.
INDIVIDUAL
.
getName
().
equals
(
company
.
getCompanyType
())
?
company
.
getCompanyCode
().
split
(
"_"
)[
1
]
:
company
.
getCompanyCode
()));
});
}
else
{
deviceList
.
forEach
(
device
->
EquipUsedCheckStrategyContext
.
getUsedStrategy
(
EQUIP_TRANSFER_PROCESS_KEY
)
.
equipRepeatUsedCheck
(
String
.
valueOf
(
device
.
get
(
"SEQUENCE_NBR"
)),
CompanyTypeEnum
.
INDIVIDUAL
.
getName
().
equals
(
company
.
getCompanyType
())
?
company
.
getCompanyCode
().
split
(
"_"
)[
1
]
:
company
.
getCompanyCode
()));
}
}
}
//获取申请单编号
ResponseModel
<
List
<
String
>>
listResponseModel
=
tzsServiceFeignClient
.
applicationFormCode
(
ApplicationFormTypeEnum
.
getCode
.
get
(
String
.
valueOf
(
jsonObjectMap
.
get
(
"businessCode"
))),
deviceList
.
size
());
this
.
handleResponseModel
(
listResponseModel
,
"告知单获取失败: "
);
List
<
String
>
applyNoList
=
listResponseModel
.
getResult
();
this
.
handleApplyNoList
(
applyNoList
);
//启动工作流
List
<
WorkflowResultDto
>
workflowResultList
=
this
.
startWorkFlow
(
model
.
getInstallUnitCreditCode
(),
submitType
,
deviceList
);
List
<
JgEquipTransfer
>
transferList
=
new
ArrayList
<>();
List
<
JgEquipTransferEq
>
equipTransferEqList
=
new
ArrayList
<>();
IntStream
.
range
(
0
,
deviceList
.
size
()).
forEach
(
i
->
{
Map
<
String
,
Object
>
obj
=
deviceList
.
get
(
i
);
String
applyNo
=
applyNoList
.
get
(
i
);
if
(
EquipmentClassifityEnum
.
YLGD
.
getCode
().
equals
(
equListCode
))
{
String
proConSeq
=
String
.
valueOf
(
obj
.
get
(
sequenceNbr
));
IdxBizJgProjectContraption
projectContraption
=
jgProjectContraptionService
.
lambdaQuery
().
eq
(
IdxBizJgProjectContraption:
:
getSequenceNbr
,
proConSeq
).
one
();
List
<
Map
<
String
,
Object
>>
equipList
=
jgProjectContraptionService
.
getBaseMapper
().
selectEquipList
(
proConSeq
);
equipList
.
forEach
(
equip
->
{
JgEquipTransferEq
jgEquipTransferEq
=
new
JgEquipTransferEq
()
.
setEquId
(
String
.
valueOf
(
equip
.
get
(
record
)))
.
setEquipTransferId
(
applyNo
);
//获取申请单编号
ResponseModel
<
List
<
String
>>
listResponseModel
=
tzsServiceFeignClient
.
applicationFormCode
(
ApplicationFormTypeEnum
.
getCode
.
get
(
String
.
valueOf
(
jsonObjectMap
.
get
(
"businessCode"
))),
deviceList
.
size
());
this
.
handleResponseModel
(
listResponseModel
,
"告知单获取失败: "
);
List
<
String
>
applyNoList
=
listResponseModel
.
getResult
();
this
.
handleApplyNoList
(
applyNoList
);
//启动工作流
List
<
WorkflowResultDto
>
workflowResultList
=
this
.
startWorkFlow
(
model
.
getInstallUnitCreditCode
(),
submitType
,
deviceList
);
List
<
JgEquipTransfer
>
transferList
=
new
ArrayList
<>();
List
<
JgEquipTransferEq
>
equipTransferEqList
=
new
ArrayList
<>();
IntStream
.
range
(
0
,
deviceList
.
size
()).
forEach
(
i
->
{
Map
<
String
,
Object
>
obj
=
deviceList
.
get
(
i
);
String
applyNo
=
applyNoList
.
get
(
i
);
if
(
EquipmentClassifityEnum
.
YLGD
.
getCode
().
equals
(
equListCode
))
{
String
proConSeq
=
String
.
valueOf
(
obj
.
get
(
sequenceNbr
));
IdxBizJgProjectContraption
projectContraption
=
jgProjectContraptionService
.
lambdaQuery
().
eq
(
IdxBizJgProjectContraption:
:
getSequenceNbr
,
proConSeq
).
one
();
List
<
Map
<
String
,
Object
>>
equipList
=
jgProjectContraptionService
.
getBaseMapper
().
selectEquipList
(
proConSeq
);
equipList
.
forEach
(
equip
->
{
JgEquipTransferEq
jgEquipTransferEq
=
new
JgEquipTransferEq
()
.
setEquId
(
String
.
valueOf
(
equip
.
get
(
record
)))
.
setEquipTransferId
(
applyNo
);
equipTransferEqList
.
add
(
jgEquipTransferEq
);
});
List
<
String
>
records
=
equipList
.
stream
().
map
(
equ
->
String
.
valueOf
(
equ
.
get
(
record
))).
collect
(
Collectors
.
toList
());
JgEquipTransfer
transfer
=
buildJgEquipTransfer
(
model
,
applyNo
,
reginParams
,
submitType
,
workflowResultList
,
i
);
transfer
.
setProjectContraptionSeq
(
proConSeq
);
transfer
.
setEquList
(
EquipmentClassifityEnum
.
YLGD
.
getName
());
transfer
.
setEquListCode
(
equListCode
);
transfer
.
setEquCategory
(
equipmentCategoryMapper
.
selectOne
(
new
LambdaQueryWrapper
<
EquipmentCategory
>().
eq
(
EquipmentCategory:
:
getCode
,
idxBizJgRegisterInfoServiceImpl
.
lambdaQuery
().
eq
(
IdxBizJgRegisterInfo:
:
getRecord
,
equipList
.
get
(
0
).
get
(
record
)).
one
().
getEquCategory
())).
getName
());
transfer
.
setEquDefine
(
equipmentCategoryMapper
.
selectOne
(
new
LambdaQueryWrapper
<
EquipmentCategory
>().
eq
(
EquipmentCategory:
:
getCode
,
idxBizJgRegisterInfoServiceImpl
.
lambdaQuery
().
eq
(
IdxBizJgRegisterInfo:
:
getRecord
,
equipList
.
get
(
0
).
get
(
record
)).
one
().
getEquDefine
())).
getName
());
transfer
.
setSupervisoryCode
(
org
.
apache
.
commons
.
lang3
.
StringUtils
.
join
(
idxBizJgOtherInfoServiceImpl
.
lambdaQuery
()
.
in
(
IdxBizJgOtherInfo:
:
getRecord
,
records
)
.
list
()
.
stream
()
.
filter
(
Objects:
:
nonNull
)
.
map
(
IdxBizJgOtherInfo:
:
getSupervisoryCode
)
.
filter
(
Objects:
:
nonNull
)
.
distinct
()
.
collect
(
Collectors
.
toList
()),
","
));
transfer
.
setProductName
(
org
.
apache
.
commons
.
lang3
.
StringUtils
.
join
(
idxBizJgRegisterInfoServiceImpl
.
lambdaQuery
()
.
in
(
IdxBizJgRegisterInfo:
:
getRecord
,
records
)
.
list
()
.
stream
()
.
filter
(
Objects:
:
nonNull
)
.
map
(
IdxBizJgRegisterInfo:
:
getProductName
)
.
filter
(
Objects:
:
nonNull
)
.
distinct
()
.
collect
(
Collectors
.
toList
()),
","
));
transfer
.
setUseRegistCode
(
projectContraption
.
getUseRegistrationCode
());
transfer
.
setUseInnerCode
(
org
.
apache
.
commons
.
lang3
.
StringUtils
.
join
(
idxBizJgUseInfoServiceImpl
.
lambdaQuery
()
.
in
(
IdxBizJgUseInfo:
:
getRecord
,
records
)
.
list
()
.
stream
()
.
filter
(
Objects:
:
nonNull
)
.
map
(
IdxBizJgUseInfo:
:
getUseInnerCode
)
.
distinct
()
.
collect
(
Collectors
.
toList
()),
","
));
transfer
.
setEquAddress
(
projectContraption
.
getAddress
());
transfer
.
setEquCode
(
org
.
apache
.
commons
.
lang3
.
StringUtils
.
join
(
idxBizJgRegisterInfoServiceImpl
.
lambdaQuery
()
.
in
(
IdxBizJgRegisterInfo:
:
getRecord
,
records
)
.
list
()
.
stream
()
.
filter
(
Objects:
:
nonNull
)
.
map
(
IdxBizJgRegisterInfo:
:
getEquCode
)
.
distinct
()
.
collect
(
Collectors
.
toList
()),
","
));
transferList
.
add
(
transfer
);
}
else
{
JgEquipTransferEq
jgEquipTransferEq
=
buildJgEquipTransferEq
(
obj
,
applyNo
);
JgEquipTransfer
transfer
=
buildJgEquipTransfer
(
model
,
applyNo
,
reginParams
,
submitType
,
workflowResultList
,
i
);
transfer
.
setSupervisoryCode
(
String
.
valueOf
(
obj
.
get
(
"SUPERVISORY_CODE"
)));
transfer
.
setEquList
(
Objects
.
toString
(
obj
.
get
(
"EQU_LIST"
),
""
));
transfer
.
setEquListCode
(
Objects
.
toString
(
obj
.
get
(
"EQU_LIST_CODE"
),
""
));
transfer
.
setEquDefine
(
Objects
.
toString
(
obj
.
get
(
"EQU_DEFINE"
),
""
));
transfer
.
setEquCategory
(
Objects
.
toString
(
obj
.
get
(
"EQU_CATEGORY"
),
""
));
transfer
.
setProductName
(
Objects
.
toString
(
obj
.
get
(
"PRODUCT_NAME"
),
""
));
transfer
.
setUseRegistCode
(
Objects
.
toString
(
obj
.
get
(
"USE_ORG_CODE"
),
""
));
transfer
.
setUseRegistCode
(
Objects
.
toString
(
obj
.
get
(
"USE_ORG_CODE"
),
""
));
transfer
.
setUseInnerCode
(
Objects
.
toString
(
obj
.
get
(
"USE_INNER_CODE"
),
""
));
transfer
.
setEquAddress
(
Objects
.
toString
(
obj
.
get
(
"ADDRESS"
),
""
));
transfer
.
setEquCode
(
Objects
.
toString
(
obj
.
get
(
"EQU_CODE"
),
""
));
transferList
.
add
(
transfer
);
equipTransferEqList
.
add
(
jgEquipTransferEq
);
});
List
<
String
>
records
=
equipList
.
stream
().
map
(
equ
->
String
.
valueOf
(
equ
.
get
(
record
))).
collect
(
Collectors
.
toList
());
JgEquipTransfer
transfer
=
buildJgEquipTransfer
(
model
,
applyNo
,
reginParams
,
submitType
,
workflowResultList
,
i
);
transfer
.
setProjectContraptionSeq
(
proConSeq
);
transfer
.
setEquList
(
EquipmentClassifityEnum
.
YLGD
.
getName
());
transfer
.
setEquListCode
(
equListCode
);
transfer
.
setEquCategory
(
equipmentCategoryMapper
.
selectOne
(
new
LambdaQueryWrapper
<
EquipmentCategory
>().
eq
(
EquipmentCategory:
:
getCode
,
idxBizJgRegisterInfoServiceImpl
.
lambdaQuery
().
eq
(
IdxBizJgRegisterInfo:
:
getRecord
,
equipList
.
get
(
0
).
get
(
record
)).
one
().
getEquCategory
())).
getName
());
transfer
.
setEquDefine
(
equipmentCategoryMapper
.
selectOne
(
new
LambdaQueryWrapper
<
EquipmentCategory
>().
eq
(
EquipmentCategory:
:
getCode
,
idxBizJgRegisterInfoServiceImpl
.
lambdaQuery
().
eq
(
IdxBizJgRegisterInfo:
:
getRecord
,
equipList
.
get
(
0
).
get
(
record
)).
one
().
getEquDefine
())).
getName
());
transfer
.
setSupervisoryCode
(
org
.
apache
.
commons
.
lang3
.
StringUtils
.
join
(
idxBizJgOtherInfoServiceImpl
.
lambdaQuery
()
.
in
(
IdxBizJgOtherInfo:
:
getRecord
,
records
)
.
list
()
.
stream
()
.
filter
(
Objects:
:
nonNull
)
.
map
(
IdxBizJgOtherInfo:
:
getSupervisoryCode
)
.
filter
(
Objects:
:
nonNull
)
.
distinct
()
.
collect
(
Collectors
.
toList
()),
","
));
transfer
.
setProductName
(
org
.
apache
.
commons
.
lang3
.
StringUtils
.
join
(
idxBizJgRegisterInfoServiceImpl
.
lambdaQuery
()
.
in
(
IdxBizJgRegisterInfo:
:
getRecord
,
records
)
.
list
()
.
stream
()
.
filter
(
Objects:
:
nonNull
)
.
map
(
IdxBizJgRegisterInfo:
:
getProductName
)
.
filter
(
Objects:
:
nonNull
)
.
distinct
()
.
collect
(
Collectors
.
toList
()),
","
));
transfer
.
setUseRegistCode
(
projectContraption
.
getUseRegistrationCode
());
transfer
.
setUseInnerCode
(
org
.
apache
.
commons
.
lang3
.
StringUtils
.
join
(
idxBizJgUseInfoServiceImpl
.
lambdaQuery
()
.
in
(
IdxBizJgUseInfo:
:
getRecord
,
records
)
.
list
()
.
stream
()
.
filter
(
Objects:
:
nonNull
)
.
map
(
IdxBizJgUseInfo:
:
getUseInnerCode
)
.
distinct
()
.
collect
(
Collectors
.
toList
()),
","
));
transfer
.
setEquAddress
(
projectContraption
.
getAddress
());
transfer
.
setEquCode
(
org
.
apache
.
commons
.
lang3
.
StringUtils
.
join
(
idxBizJgRegisterInfoServiceImpl
.
lambdaQuery
()
.
in
(
IdxBizJgRegisterInfo:
:
getRecord
,
records
)
.
list
()
.
stream
()
.
filter
(
Objects:
:
nonNull
)
.
map
(
IdxBizJgRegisterInfo:
:
getEquCode
)
.
distinct
()
.
collect
(
Collectors
.
toList
()),
","
));
transferList
.
add
(
transfer
);
}
});
baseMapper
.
insertBatchSomeColumn
(
transferList
);
if
(
SUBMIT_TYPE_FLOW
.
equals
(
submitType
))
{
this
.
buildTask
(
transferList
,
workflowResultList
);
}
else
{
JgEquipTransferEq
jgEquipTransferEq
=
buildJgEquipTransferEq
(
obj
,
applyNo
);
JgEquipTransfer
transfer
=
buildJgEquipTransfer
(
model
,
applyNo
,
reginParams
,
submitType
,
workflowResultList
,
i
);
transfer
.
setSupervisoryCode
(
String
.
valueOf
(
obj
.
get
(
"SUPERVISORY_CODE"
)));
transfer
.
setEquList
(
Objects
.
toString
(
obj
.
get
(
"EQU_LIST"
),
""
));
transfer
.
setEquListCode
(
Objects
.
toString
(
obj
.
get
(
"EQU_LIST_CODE"
),
""
));
transfer
.
setEquDefine
(
Objects
.
toString
(
obj
.
get
(
"EQU_DEFINE"
),
""
));
transfer
.
setEquCategory
(
Objects
.
toString
(
obj
.
get
(
"EQU_CATEGORY"
),
""
));
transfer
.
setProductName
(
Objects
.
toString
(
obj
.
get
(
"PRODUCT_NAME"
),
""
));
transfer
.
setUseRegistCode
(
Objects
.
toString
(
obj
.
get
(
"USE_ORG_CODE"
),
""
));
transfer
.
setUseRegistCode
(
Objects
.
toString
(
obj
.
get
(
"USE_ORG_CODE"
),
""
));
transfer
.
setUseInnerCode
(
Objects
.
toString
(
obj
.
get
(
"USE_INNER_CODE"
),
""
));
transfer
.
setEquAddress
(
Objects
.
toString
(
obj
.
get
(
"ADDRESS"
),
""
));
transfer
.
setEquCode
(
Objects
.
toString
(
obj
.
get
(
"EQU_CODE"
),
""
));
transferList
.
add
(
transfer
);
equipTransferEqList
.
add
(
jgEquipTransferEq
);
//批量暂存
this
.
saveTempTransfer
(
transferList
);
}
});
baseMapper
.
insertBatchSomeColumn
(
transferList
);
if
(
SUBMIT_TYPE_FLOW
.
equals
(
submitType
))
{
this
.
buildTask
(
transferList
,
workflowResultList
);
}
else
{
//批量暂存
this
.
saveTempTransfer
(
transferList
);
List
<
JgEquipTransferEq
>
jgEquipTransferEqList
=
this
.
buildJgEquipTransferEqList
(
equipTransferEqList
,
transferList
);
jgEquipTransferEqMapper
.
insertBatchSomeColumn
(
jgEquipTransferEqList
);
this
.
updateRedisBatch
(
transferList
);
// 创建历史数据
this
.
saveOrUpdateHisDataBatch
(
equListCode
,
transferList
,
jgEquipTransferEqList
);
return
transferList
;
}
catch
(
BadRequest
|
LocalBadRequest
e
)
{
log
.
error
(
e
.
getMessage
(),
e
);
this
.
rollBackForDelRedisData
();
throw
e
;
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
(),
e
);
this
.
rollBackForDelRedisData
();
throw
new
BadRequest
(
"保存失败!"
);
}
finally
{
FlowingEquipRedisContext
.
clean
();
}
}
List
<
JgEquipTransferEq
>
jgEquipTransferEqList
=
this
.
buildJgEquipTransferEqList
(
equipTransferEqList
,
transferList
);
jgEquipTransferEqMapper
.
insertBatchSomeColumn
(
jgEquipTransferEqList
);
this
.
updateRedisBatch
(
transferList
);
// 创建历史数据
this
.
saveOrUpdateHisDataBatch
(
equListCode
,
transferList
,
jgEquipTransferEqList
);
return
transferList
;
private
void
rollBackForDelRedisData
()
{
FlowingEquipRedisContext
.
getContext
().
forEach
(
e
->
{
EquipUsedCheckStrategyContext
.
getUsedStrategy
(
EQUIP_TRANSFER_PROCESS_KEY
)
.
delDataForCheckWithKey
(
e
.
getData
(),
e
.
getRedisKey
());
});
}
/**
...
...
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