Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
cash-loan-flow-boss
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
QG
cash-loan-flow-boss
Commits
f5bf54f5
Commit
f5bf54f5
authored
Sep 10, 2019
by
suntao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
订单放款操作 优化
parent
d34603ef
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
88 additions
and
72 deletions
+88
-72
OrderService.java
...roup/cashloanflowboss/api/order/service/OrderService.java
+48
-23
LoanProgress.java
...antgroup/cashloanflowboss/spi/clf/model/LoanProgress.java
+40
-49
No files found.
src/main/java/cn/quantgroup/cashloanflowboss/api/order/service/OrderService.java
View file @
f5bf54f5
...
@@ -308,9 +308,30 @@ public class OrderService {
...
@@ -308,9 +308,30 @@ public class OrderService {
@Transactional
@Transactional
public
boolean
secondAudit
(
String
channelOrderNumber
)
{
public
boolean
secondAudit
(
String
channelOrderNumber
)
{
boolean
result
;
boolean
result
=
true
;
// 操作记录
OptHistoryLog
optHistoryLog
=
new
OptHistoryLog
();
optHistoryLog
.
setChannelOrderNumber
(
channelOrderNumber
);
ClfOrderMapping
orderMapping
=
this
.
clfOrderMappingRepository
.
findByChannelOrderNoLastOne
(
channelOrderNumber
);
ClfOrderMapping
orderMapping
=
this
.
clfOrderMappingRepository
.
findByChannelOrderNoLastOne
(
channelOrderNumber
);
if
(
orderMapping
==
null
||
orderMapping
.
getLoanId
()
==
null
)
{
log
.
info
(
"secondAudit,orderMapping为空或者loanId为空,channelOrderNumber="
.
concat
(
channelOrderNumber
));
optHistoryLog
.
setOptName
(
"二次审批操作"
);
optHistoryLog
.
setOptLogDetail
(
"orderMapping为空或者loanId为空,操作失败"
);
optHistoryLog
.
setOptResult
(
false
);
optHistoryLog
.
setCreateTime
(
new
Date
());
optHistoryLogService
.
save
(
optHistoryLog
);
return
false
;
}
optHistoryLog
.
setCreditNumber
(
orderMapping
.
getApplyNo
());
optHistoryLog
.
setLoanId
(
orderMapping
.
getLoanId
());
optHistoryLog
.
setChannelId
(
orderMapping
.
getRegisteredFrom
());
optHistoryLog
.
setOptName
(
"二次审批操作"
);
optHistoryLog
.
setCreateTime
(
new
Date
());
// 更新合同状态
// 更新合同状态
Contract
conscont
=
xyqbCenterService
.
findContractByUserId
(
orderMapping
.
getQgUserId
());
Contract
conscont
=
xyqbCenterService
.
findContractByUserId
(
orderMapping
.
getQgUserId
());
...
@@ -319,17 +340,14 @@ public class OrderService {
...
@@ -319,17 +340,14 @@ public class OrderService {
xyqbCenterService
.
saveContract
(
conscont
);
xyqbCenterService
.
saveContract
(
conscont
);
}
else
{
}
else
{
// 合同为空 log表记录问题,UI用户查询
// 合同为空 log表记录问题,UI用户查询
}
log
.
info
(
"secondAudit,合同为空,channelOrderNumber="
.
concat
(
channelOrderNumber
));
optHistoryLog
.
setOptName
(
"二次审批操作"
);
// 操作记录
optHistoryLog
.
setOptLogDetail
(
"合同为空,请更换新的身份证尝试"
);
OptHistoryLog
optHistoryLog
=
new
OptHistoryLog
();
optHistoryLog
.
setOptResult
(
false
);
optHistoryLog
.
setChannelOrderNumber
(
channelOrderNumber
);
optHistoryLog
.
setCreditNumber
(
orderMapping
.
getApplyNo
());
optHistoryLog
.
setLoanId
(
orderMapping
.
getLoanId
());
optHistoryLog
.
setChannelId
(
orderMapping
.
getRegisteredFrom
());
optHistoryLog
.
setOptName
(
"审批操作"
);
optHistoryLog
.
setCreateTime
(
new
Date
());
optHistoryLog
.
setCreateTime
(
new
Date
());
optHistoryLogService
.
save
(
optHistoryLog
);
// 不需要return
}
// 二次风控回调
// 二次风控回调
XUser
xUser
=
xyqbUserService
.
findXUserById
(
orderMapping
.
getQgUserId
());
XUser
xUser
=
xyqbUserService
.
findXUserById
(
orderMapping
.
getQgUserId
());
...
@@ -349,6 +367,10 @@ public class OrderService {
...
@@ -349,6 +367,10 @@ public class OrderService {
return
false
;
return
false
;
}
}
LoanApplicationHistory
loanApplicationHistory
=
xyqbCenterService
.
findLoanApplicationHistoryById
(
orderMapping
.
getLoanId
());
if
(
LoanProgress
.
START_ORDER
.
equals
(
loanApplicationHistory
.
getProgress
()))
{
// 50
log
.
info
(
"[secendAudit]二次风控发起,channelOrderNumber={}, bizType={}"
,
channelOrderNumber
,
channelConf
.
getBizType
());
log
.
info
(
"[secendAudit]二次风控发起,channelOrderNumber={}, bizType={}"
,
channelOrderNumber
,
channelConf
.
getBizType
());
result
=
clothoCenterService
.
orderAuditNotify
(
xUser
.
getUuid
(),
orderMapping
.
getLoanId
(),
true
,
channelConf
.
getBizType
());
result
=
clothoCenterService
.
orderAuditNotify
(
xUser
.
getUuid
(),
orderMapping
.
getLoanId
(),
true
,
channelConf
.
getBizType
());
if
(
result
)
{
if
(
result
)
{
...
@@ -360,7 +382,10 @@ public class OrderService {
...
@@ -360,7 +382,10 @@ public class OrderService {
optHistoryLogService
.
save
(
optHistoryLog
);
optHistoryLogService
.
save
(
optHistoryLog
);
return
false
;
return
false
;
}
}
}
else
if
(
LoanProgress
.
WAITING_FUND
.
equals
(
loanApplicationHistory
.
getProgress
()))
{
// 20 已经回调过
result
=
true
;
}
// 更新待放款时间(5分钟之前)
// 更新待放款时间(5分钟之前)
FundLending
fundLending
=
xyqbCenterService
.
findFundLendingByLoanId
(
orderMapping
.
getLoanId
());
FundLending
fundLending
=
xyqbCenterService
.
findFundLendingByLoanId
(
orderMapping
.
getLoanId
());
...
@@ -694,7 +719,7 @@ public class OrderService {
...
@@ -694,7 +719,7 @@ public class OrderService {
secondAudit
.
setAction
(
OrderVo
.
OptButtonAction
.
second_audit
.
name
());
secondAudit
.
setAction
(
OrderVo
.
OptButtonAction
.
second_audit
.
name
());
secondAudit
.
setName
(
OrderVo
.
OptButtonAction
.
second_audit
.
getDesc
());
secondAudit
.
setName
(
OrderVo
.
OptButtonAction
.
second_audit
.
getDesc
());
buttonList
.
add
(
secondAudit
);
buttonList
.
add
(
secondAudit
);
}
else
if
(
LoanProgress
.
FINAL_SEND
_TO_MASHANG_BEFORE_APPROVAL
.
equals
(
loanApplicationHistory
.
getProgress
()))
{
}
else
if
(
LoanProgress
.
FINAL_SEND
ED_TO_FUNDING_CORP
.
equals
(
loanApplicationHistory
.
getProgress
()))
{
OrderVo
.
OptButton
buttonPaySucc
=
new
OrderVo
.
OptButton
();
OrderVo
.
OptButton
buttonPaySucc
=
new
OrderVo
.
OptButton
();
buttonPaySucc
.
setAction
(
OrderVo
.
OptButtonAction
.
pay_succ
.
name
());
buttonPaySucc
.
setAction
(
OrderVo
.
OptButtonAction
.
pay_succ
.
name
());
buttonPaySucc
.
setName
(
OrderVo
.
OptButtonAction
.
pay_succ
.
getDesc
());
buttonPaySucc
.
setName
(
OrderVo
.
OptButtonAction
.
pay_succ
.
getDesc
());
...
...
src/main/java/cn/quantgroup/cashloanflowboss/spi/clf/model/LoanProgress.java
View file @
f5bf54f5
...
@@ -14,9 +14,8 @@ public enum LoanProgress {
...
@@ -14,9 +14,8 @@ public enum LoanProgress {
*/
*/
USERINFO_INCOMPLETE
(
"用户未填写个人信息"
),
//0
USERINFO_INCOMPLETE
(
"用户未填写个人信息"
),
//0
USER_INFORMATION_INCOMPLETE
(
"用户未填写贷款信息"
),
//1
USER_INFORMATION_INCOMPLETE
(
"用户未填写贷款信息"
),
//1
USER_AUTHENTICATION_INCOMPLETE
(
"用户授权信息未全部完成"
),
//2
USER_AUTHENTICATION_INCOMPLETE
(
"用户授权信息未全部完成"
),
//2
USER_AUTHENTICATION_COMPLETE
(
"授权
状态
完成"
),
//3
USER_AUTHENTICATION_COMPLETE
(
"授权
信息
完成"
),
//3
FURTHER_INFORMATION_INCOMPLETE
(
"用户补充资料未完成"
),
//4
FURTHER_INFORMATION_INCOMPLETE
(
"用户补充资料未完成"
),
//4
PRE_SCREENING
(
"初审中"
),
//5
PRE_SCREENING
(
"初审中"
),
//5
PRE_SCREENING_REJECT
(
"初审拒绝"
),
//6
PRE_SCREENING_REJECT
(
"初审拒绝"
),
//6
...
@@ -33,10 +32,11 @@ public enum LoanProgress {
...
@@ -33,10 +32,11 @@ public enum LoanProgress {
FILTERED_BY_BLACKLIST
(
"黑名单过滤"
),
//17
FILTERED_BY_BLACKLIST
(
"黑名单过滤"
),
//17
FINAL_SCREENING_PASSED
(
"后台终审通过"
),
//18
FINAL_SCREENING_PASSED
(
"后台终审通过"
),
//18
FILTERING_DECLINED
(
"未通过初筛"
),
//19
FILTERING_DECLINED
(
"未通过初筛"
),
//19
WAITING_FUND
(
"等待资金方放款"
),
// 20
/* 资金方相关 */
FINAL_SEND_TO_MASHANG_BEFORE_APPROVAL
(
"已发送给马上金融, 等待放款"
),
//21, 发邮件后更新使用
WAITING_FUND
(
"等待马上金融放款"
),
// 20
FINAL_MASHANG_APPROVAL_SUCCESS
(
"马上金融放款成功"
),
//22
FINAL_SENDED_TO_FUNDING_CORP
(
"已发送给马上金融, 等待放款"
),
//21
FINAL_FUNDED_APPROVAL_FAIL
(
"马上金融放款失败"
),
//23,
FINAL_FUNDED_APPROVAL_SUCCESS
(
"马上金融放款成功"
),
//22
FINAL_FUNDED_APPROVAL_FAIL
(
"马上金融放款失败"
),
//23
ADDRESS_COMPLETE
(
"地址填写完毕,去绑卡"
),
// 24
ADDRESS_COMPLETE
(
"地址填写完毕,去绑卡"
),
// 24
BEIYIN_USERINFO_INCOMPLETE
(
"北银消费-用户未填写个人信息"
),
//25
BEIYIN_USERINFO_INCOMPLETE
(
"北银消费-用户未填写个人信息"
),
//25
...
@@ -55,55 +55,48 @@ public enum LoanProgress {
...
@@ -55,55 +55,48 @@ public enum LoanProgress {
BAITIAO_BIND_CARD
(
"白条-绑卡"
),
//37
BAITIAO_BIND_CARD
(
"白条-绑卡"
),
//37
BAITIAO_BIND_CARD_ING
(
"白条-绑卡中"
),
//38
BAITIAO_BIND_CARD_ING
(
"白条-绑卡中"
),
//38
BAITIAO_ACTIVATE_SUCC
(
"白条-激活成功"
),
//39
BAITIAO_ACTIVATE_SUCC
(
"白条-激活成功"
),
//39
SUBMITED_TO_FUND_CORP_PRE_ASSIGN
(
"提交资金方预审"
),
// 40
/**
* 修改时间 20160104 资金方解耦
USER_RELATION_INCOMPLETE
(
"与用户相关联系人信息未完成"
),
//41
*/
FUND_ERROR
(
"资金方事故,多次放款,汇聚到1渠道去还款"
),
//42
// category 4x
XIAOYING_BIND_CARD
(
"小赢需要绑卡一下"
),
// 43
/* 易联校验/代收订单 异步通知重构 */
XIAOYING_VERIFY_CARD
(
"小赢需要验证卡"
),
// 44
BIND_BANKCARD_IN_PROGRESS
(
"绑卡处理中"
),
//40
XIAOYING_BIND_CARD_POLL_RECHARGE_RESULT
(
"小赢绑卡轮询结果"
),
// 45
/*REPAY_ORDER_IN_PROGRESS("还款处理中")*/
// 46
USER_RELATION_INCOMPLETE
(
"与用户相关联系人信息未完成"
),
//41,
BUY_ACCELERATE_CARD
(
"需购买加速卡"
),
PING_AN_PAGE
(
"跳转平安填写信息页面"
),
DROP_SUCC
(
"取消借款"
),
//48
PLACE_HOLDER_42
(
"占位"
),
PLACE_HOLDER_43
(
"占位"
),
PLACE_HOLDER_44
(
"占位"
),
PLACE_HOLDER_45
(
"占位"
),
PLACE_HOLDER_46
(
"占位"
),
PING_AN_PAGE
(
"跳转平安填写信息页面"
),
// 47
DROP_SUCC
(
"取消借款"
),
//48
PLACE_HOLDER_49
(
"占位"
),
PLACE_HOLDER_49
(
"占位"
),
// category 5x
// category 5x
PLACE_HOLDER_50
(
"占位"
),
PLACE_HOLDER_51
(
"占位"
),
PLACE_HOLDER_52
(
"占位"
),
PLACE_HOLDER_53
(
"占位"
),
PLACE_HOLDER_54
(
"占位"
),
START_ORDER
(
"发起提现,等待二次风控审核"
),
PLACE_HOLDER_51
(
"占位"
),
SPEED_EXIST
(
"极速APP存在订单"
),
PLACE_HOLDER_53
(
"占位"
),
PLACE_HOLDER_54
(
"占位"
),
PLACE_HOLDER_55
(
"占位"
),
PLACE_HOLDER_56
(
"占位"
),
PLACE_HOLDER_57
(
"占位"
),
PLACE_HOLDER_58
(
"占位"
),
PLACE_HOLDER_59
(
"占位"
),
PLACE_HOLDER_55
(
"占位"
),
PLACE_HOLDER_56
(
"占位"
),
PLACE_HOLDER_57
(
"占位"
),
PLACE_HOLDER_58
(
"占位"
),
PLACE_HOLDER_59
(
"占位"
),
// category 6x
// category 6x
PLACE_HOLDER_60
(
"占位"
),
PLACE_HOLDER_61
(
"占位"
),
PLACE_HOLDER_62
(
"占位"
),
PLACE_HOLDER_63
(
"占位"
),
PLACE_HOLDER_64
(
"占位"
),
WAITING_USE
(
"等待提现"
),
WAITING_USE_2
(
"等待提现,直接跳转到提现页"
),
WAITING_USE_BY_SPEED
(
"极速APP提现页面"
),
PLACE_HOLDER_63
(
"占位"
),
PLACE_HOLDER_64
(
"占位"
),
WAITING_WITHDRAW
(
"待存管提现"
),
// 65
WAITING_WITHDRAW
(
"等待二次(存管)提现"
),
PLACE_HOLDER_66
(
"占位"
),
PLACE_HOLDER_67
(
"占位"
),
PLACE_HOLDER_68
(
"占位"
),
PLACE_HOLDER_69
(
"占位"
),
PLACE_HOLDER_66
(
"占位"
),
PLACE_HOLDER_67
(
"占位"
),
PLACE_HOLDER_68
(
"占位"
),
PLACE_HOLDER_69
(
"占位"
),
// category 7x
// category 7x
PLACE_HOLDER_70
(
"占位"
),
PLACE_HOLDER_71
(
"占位"
),
PLACE_HOLDER_72
(
"占位"
),
PLACE_HOLDER_73
(
"占位"
),
PLACE_HOLDER_74
(
"占位"
),
PLACE_HOLDER_70
(
"占位"
),
PLACE_HOLDER_71
(
"占位"
),
PLACE_HOLDER_72
(
"占位"
),
PLACE_HOLDER_73
(
"占位"
),
PLACE_HOLDER_74
(
"占位"
),
PLACE_HOLDER_75
(
"占位"
),
PLACE_HOLDER_76
(
"占位"
),
PLACE_HOLDER_77
(
"占位"
),
PLACE_HOLDER_78
(
"占位"
),
PLACE_HOLDER_79
(
"占位"
),
PLACE_HOLDER_75
(
"占位"
),
PLACE_HOLDER_76
(
"占位"
),
PLACE_HOLDER_77
(
"占位"
),
PLACE_HOLDER_78
(
"占位"
),
PLACE_HOLDER_79
(
"占位"
),
// category 8x
// category 8x
PLACE_HOLDER_80
(
"占位"
),
PLACE_HOLDER_81
(
"占位"
),
PLACE_HOLDER_82
(
"占位"
),
PLACE_HOLDER_83
(
"占位"
),
PLACE_HOLDER_84
(
"占位"
),
PLACE_HOLDER_80
(
"占位"
),
PLACE_HOLDER_81
(
"占位"
),
PLACE_HOLDER_82
(
"占位"
),
PLACE_HOLDER_83
(
"占位"
),
PLACE_HOLDER_84
(
"占位"
),
PLACE_HOLDER_85
(
"占位"
),
PLACE_HOLDER_86
(
"占位"
),
PLACE_HOLDER_87
(
"占位"
),
PLACE_HOLDER_88
(
"占位"
),
PLACE_HOLDER_89
(
"占位"
),
PLACE_HOLDER_85
(
"占位"
),
PLACE_HOLDER_86
(
"占位"
),
PLACE_HOLDER_87
(
"占位"
),
PLACE_HOLDER_88
(
"占位"
),
PLACE_HOLDER_89
(
"占位"
),
// category 9x
// category 9x
PLACE_HOLDER_90
(
"占位"
),
PLACE_HOLDER_91
(
"占位"
),
PLACE_HOLDER_92
(
"占位"
),
PLACE_HOLDER_93
(
"占位"
),
PLACE_HOLDER_94
(
"占位"
),
PLACE_HOLDER_90
(
"占位"
),
PLACE_HOLDER_91
(
"占位"
),
PLACE_HOLDER_92
(
"占位"
),
PLACE_HOLDER_93
(
"占位"
),
PLACE_HOLDER_94
(
"占位"
),
PLACE_HOLDER_95
(
"占位"
),
PLACE_HOLDER_96
(
"占位"
),
PLACE_HOLDER_97
(
"占位"
),
PLACE_HOLDER_98
(
"占位"
),
PLACE_HOLDER_99
(
"占位"
),
PLACE_HOLDER_95
(
"占位"
),
PLACE_HOLDER_96
(
"占位"
),
PLACE_HOLDER_97
(
"占位"
),
PLACE_HOLDER_98
(
"占位"
),
PLACE_HOLDER_99
(
"占位"
),
/**
* 资金方相关
*/
// 等待资金方放款 : 100
WAITING_MASHANG_FUND
(
"等待马上金融放款"
),
// 100, 发邮件前查询使用
// 已提交给资金方等待放款 : 101
SENDED_TO_FUND_CORP
(
"已提交给资金方"
),
// category 10x
// category 10x
PLACE_HOLDER_10
2
(
"占位"
),
PLACE_HOLDER_103
(
"占位"
),
PLACE_HOLDER_104
(
"占位"
),
PLACE_HOLDER_105
(
"占位"
),
PLACE_HOLDER_106
(
"占位"
),
PLACE_HOLDER_10
0
(
"占位"
),
PLACE_HOLDER_101
(
"占位"
),
PLACE_HOLDER_102
(
"占位"
),
PLACE_HOLDER_103
(
"占位"
),
PLACE_HOLDER_104
(
"占位"
),
PLACE_HOLDER_10
7
(
"占位"
),
PLACE_HOLDER_108
(
"占位"
),
PLACE_HOLDER_109
(
"占位"
),
PLACE_HOLDER_10
5
(
"占位"
),
PLACE_HOLDER_106
(
"占位"
),
PLACE_HOLDER_107
(
"占位"
),
PLACE_HOLDER_108
(
"占位"
),
PLACE_HOLDER_109
(
"占位"
),
JD_BANDCARD_FAIL
(
"京东绑卡失败"
)
//110 京东绑卡失败状态
// category 11x
;
JD_BANDCARD_FAIL
(
"京东绑卡失败"
),
PLACE_HOLDER_111
(
"占位"
),
PLACE_HOLDER_112
(
"占位"
),
PLACE_HOLDER_113
(
"占位"
),
PLACE_HOLDER_114
(
"占位"
),
PLACE_HOLDER_115
(
"占位"
),
PLACE_HOLDER_116
(
"占位"
),
PLACE_HOLDER_117
(
"占位"
),
PLACE_HOLDER_118
(
"占位"
),
PLACE_HOLDER_119
(
"占位"
),
// cash_loan_flow生成的订单禁止进入xyqb操作状态 12x
REFUSE_JD
(
"拒绝京东订单进入xyqb"
),
PLACE_HOLDER_121
(
"占位"
),
PLACE_HOLDER_122
(
"占位"
),
PLACE_HOLDER_123
(
"占位"
),
PLACE_HOLDER_124
(
"占位"
),
PLACE_HOLDER_125
(
"占位"
),
PLACE_HOLDER_126
(
"占位"
),
PLACE_HOLDER_127
(
"占位"
),
PLACE_HOLDER_128
(
"占位"
),
PLACE_HOLDER_129
(
"占位"
);
private
String
description
;
private
String
description
;
...
@@ -126,19 +119,17 @@ public enum LoanProgress {
...
@@ -126,19 +119,17 @@ public enum LoanProgress {
/**
/**
* 获取审核拒绝状态
* 获取审核拒绝状态
* @return
*/
*/
public
static
Set
<
LoanProgress
>
getCheckReject
(){
public
static
Set
<
LoanProgress
>
getCheckReject
()
{
return
Sets
.
newHashSet
(
LoanProgress
.
FILTERING_DECLINED
,
LoanProgress
.
PRE_SCREENING_REJECT
,
return
Sets
.
newHashSet
(
LoanProgress
.
FILTERING_DECLINED
,
LoanProgress
.
PRE_SCREENING_REJECT
,
LoanProgress
.
FINAL_SCREENING_REJECT
,
LoanProgress
.
FILTERED_BY_BLACKLIST
);
LoanProgress
.
FINAL_SCREENING_REJECT
,
LoanProgress
.
FILTERED_BY_BLACKLIST
);
}
}
/**
public
static
LoanProgress
valueOfByOrdinal
(
int
ordinal
)
{
* 获取推送订单状态
try
{
* @return
return
LoanProgress
.
values
()[
ordinal
];
*/
}
catch
(
Exception
e
)
{
public
static
Set
<
LoanProgress
>
getFeedBackOrderStatus
(){
return
null
;
return
Sets
.
newHashSet
(
LoanProgress
.
WAITING_FUND
,
LoanProgress
.
FINAL_SEND_TO_MASHANG_BEFORE_APPROVAL
,
}
LoanProgress
.
FINAL_FUNDED_APPROVAL_FAIL
,
LoanProgress
.
CHECK_REPAYMENT_PLAN
,
LoanProgress
.
LOAN_COMPLETE
);
}
}
}
}
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