记得上下班打卡 | git大法好,push需谨慎
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liquidnet-bus-v1
Project
Project
Details
Activity
Releases
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
董敬伟
liquidnet-bus-v1
Commits
5c7b9ce5
Commit
5c7b9ce5
authored
Jul 02, 2021
by
anjiabin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
sync 增加日志
parent
fc780867
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
276 additions
and
264 deletions
+276
-264
KylinOrderTicketsController.java
...service/kylin/controller/KylinOrderTicketsController.java
+0
-14
KylinOrderTicketsServiceImpl.java
...vice/kylin/service/impl/KylinOrderTicketsServiceImpl.java
+131
-125
KylinOrderTicketsController.java
...service/order/controller/KylinOrderTicketsController.java
+14
-0
KylinOrderTicketsServiceImpl.java
...vice/order/service/impl/KylinOrderTicketsServiceImpl.java
+131
-125
No files found.
liquidnet-bus-service/liquidnet-service-kylin/liquidnet-service-kylin-impl/src/main/java/com/liquidnet/service/kylin/controller/KylinOrderTicketsController.java
View file @
5c7b9ce5
...
@@ -126,20 +126,6 @@ public class KylinOrderTicketsController {
...
@@ -126,20 +126,6 @@ public class KylinOrderTicketsController {
}
}
@GetMapping
(
"checkPayment"
)
@ApiOperation
(
"订单状态"
)
@ApiResponse
(
code
=
200
,
message
=
"接口返回对象参数"
)
public
ResponseDto
<
HashMap
>
checkOrderResult
(
@RequestParam
(
"orderId"
)
@NotNull
(
message
=
"订单id不能为空"
)
String
orderId
)
{
Integer
status
=
orderTicketsService
.
checkOrderResult
(
orderId
).
getData
();
if
(
null
==
status
)
{
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"20003"
));
}
else
{
HashMap
<
String
,
Integer
>
map
=
new
HashMap
<>();
map
.
put
(
"status"
,
status
);
return
ResponseDto
.
success
(
map
);
}
}
@GetMapping
(
"orderUnPayCount"
)
@GetMapping
(
"orderUnPayCount"
)
@ApiOperation
(
"待支付演出订单数量"
)
@ApiOperation
(
"待支付演出订单数量"
)
@ApiResponse
(
code
=
200
,
message
=
"接口返回对象参数"
)
@ApiResponse
(
code
=
200
,
message
=
"接口返回对象参数"
)
...
...
liquidnet-bus-service/liquidnet-service-kylin/liquidnet-service-kylin-impl/src/main/java/com/liquidnet/service/kylin/service/impl/KylinOrderTicketsServiceImpl.java
View file @
5c7b9ce5
...
@@ -700,153 +700,159 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
...
@@ -700,153 +700,159 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
@Override
@Override
public
String
syncOrder
(
SyncOrderParam
syncOrderParam
)
{
public
String
syncOrder
(
SyncOrderParam
syncOrderParam
)
{
//支付时间
try
{
LocalDateTime
now
=
LocalDateTime
.
now
();
//支付时间
String
lock
=
"order_lock:"
+
syncOrderParam
.
getOrder_code
();
LocalDateTime
now
=
LocalDateTime
.
now
();
if
(!
redisLockUtil
.
tryLock
(
lock
,
1
,
5
))
{
String
lock
=
"order_lock:"
+
syncOrderParam
.
getOrder_code
();
return
"fail"
;
//参数错误
if
(!
redisLockUtil
.
tryLock
(
lock
,
1
,
5
))
{
}
return
"fail"
;
//参数错误
}
String
timePay
=
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
format
(
now
);
KylinOrderTicketVo
orderTicketData
=
mongoTemplate
.
findOne
(
Query
.
query
(
Criteria
.
where
(
"orderCode"
).
is
(
syncOrderParam
.
getOrder_code
())),
KylinOrderTicketVo
.
class
,
KylinOrderTicketVo
.
class
.
getSimpleName
());
if
(
orderTicketData
==
null
)
{
redisLockUtil
.
unlock
(
lock
);
return
"fail"
;
//订单不存在
}
if
(
orderTicketData
.
getStatus
()
!=
KylinTableStatusConst
.
ORDER_STATUS0
)
{
String
timePay
=
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
format
(
now
);
if
(
orderTicketData
.
getPayCode
().
equals
(
syncOrderParam
.
getCode
())
&&
orderTicketData
.
getStatus
()
==
KylinTableStatusConst
.
ORDER_STATUS1
)
{
KylinOrderTicketVo
orderTicketData
=
mongoTemplate
.
findOne
(
Query
.
query
(
Criteria
.
where
(
"orderCode"
).
is
(
syncOrderParam
.
getOrder_code
())),
KylinOrderTicketVo
.
class
,
KylinOrderTicketVo
.
class
.
getSimpleName
());
if
(
orderTicketData
==
null
)
{
redisLockUtil
.
unlock
(
lock
);
redisLockUtil
.
unlock
(
lock
);
return
"
success"
;
//已经支付
return
"
fail"
;
//订单不存在
}
}
if
(!
orderTicketData
.
getPayCode
().
equals
(
syncOrderParam
.
getCode
()))
{
if
(
orderTicketData
.
getStatus
()
!=
KylinTableStatusConst
.
ORDER_STATUS0
)
{
redisLockUtil
.
unlock
(
lock
);
if
(
orderTicketData
.
getPayCode
().
equals
(
syncOrderParam
.
getCode
())
&&
orderTicketData
.
getStatus
()
==
KylinTableStatusConst
.
ORDER_STATUS1
)
{
return
"fail"
;
//重复支付
redisLockUtil
.
unlock
(
lock
);
return
"success"
;
//已经支付
}
if
(!
orderTicketData
.
getPayCode
().
equals
(
syncOrderParam
.
getCode
()))
{
redisLockUtil
.
unlock
(
lock
);
return
"fail"
;
//重复支付
}
}
}
}
if
(
orderTicketData
.
getPriceActual
().
compareTo
(
syncOrderParam
.
getPrice
())
!=
0
)
{
if
(
orderTicketData
.
getPriceActual
().
compareTo
(
syncOrderParam
.
getPrice
())
!=
0
)
{
redisLockUtil
.
unlock
(
lock
);
redisLockUtil
.
unlock
(
lock
);
return
"fail"
;
//价格不符
return
"fail"
;
//价格不符
}
}
LinkedList
<
String
>
sqls
=
new
LinkedList
<>();
LinkedList
<
String
>
sqls
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataA
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataA
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataB
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataB
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataC
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataC
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataD
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataD
=
new
LinkedList
<>();
LocalDateTime
strTime
=
orderTicketData
.
getChangeDate
();
LocalDateTime
strTime
=
orderTicketData
.
getChangeDate
();
KylinOrderTickets
orderTickets
=
new
KylinOrderTickets
();
KylinOrderTickets
orderTickets
=
new
KylinOrderTickets
();
KylinOrderTicketStatus
orderTicketStatus
=
new
KylinOrderTicketStatus
();
KylinOrderTicketStatus
orderTicketStatus
=
new
KylinOrderTicketStatus
();
KylinOrderTicketEntities
orderTicketEntities
=
new
KylinOrderTicketEntities
();
KylinOrderTicketEntities
orderTicketEntities
=
new
KylinOrderTicketEntities
();
if
(
orderTicketData
.
getStatus
()
==
2
)
{
if
(
orderTicketData
.
getStatus
()
==
2
)
{
mongoVoUtils
.
resetOrderListVo
(
orderTicketData
.
getUserId
(),
2
,
orderTicketData
.
getOrderTicketsId
(),
null
);
mongoVoUtils
.
resetOrderListVo
(
orderTicketData
.
getUserId
(),
2
,
orderTicketData
.
getOrderTicketsId
(),
null
);
log
.
error
(
"订单号位 {} 的订单超时支付"
,
syncOrderParam
.
getOrder_code
());
log
.
error
(
"订单号位 {} 的订单超时支付"
,
syncOrderParam
.
getOrder_code
());
orderRefundsCallbackService
.
refundApply
(
orderTicketData
.
getOrderTicketsId
());
orderRefundsCallbackService
.
refundApply
(
orderTicketData
.
getOrderTicketsId
());
}
else
if
(
orderTicketData
.
getStatus
()
==
3
||
orderTicketData
.
getStatus
()
==
4
)
{
}
else
if
(
orderTicketData
.
getStatus
()
==
3
||
orderTicketData
.
getStatus
()
==
4
)
{
log
.
error
(
"订单号位 {} 的订单正在退款 或者已退款"
,
syncOrderParam
.
getOrder_code
());
log
.
error
(
"订单号位 {} 的订单正在退款 或者已退款"
,
syncOrderParam
.
getOrder_code
());
}
else
{
}
else
{
orderTickets
.
setOrderTicketsId
(
orderTicketData
.
getOrderTicketsId
());
orderTickets
.
setOrderTicketsId
(
orderTicketData
.
getOrderTicketsId
());
orderTickets
.
setPaymentType
(
syncOrderParam
.
getPayment_type
());
orderTickets
.
setPaymentType
(
syncOrderParam
.
getPayment_type
());
orderTickets
.
setPayCode
(
syncOrderParam
.
getCode
());
orderTickets
.
setPayCode
(
syncOrderParam
.
getCode
());
orderTickets
.
setTimePay
(
timePay
);
orderTickets
.
setTimePay
(
timePay
);
orderTickets
.
setQrCode
(
IDGenerator
.
ticketQrCode
(
orderTicketData
.
getOrderTicketsId
()));
orderTickets
.
setQrCode
(
IDGenerator
.
ticketQrCode
(
orderTicketData
.
getOrderTicketsId
()));
orderTickets
.
setUpdatedAt
(
now
);
orderTickets
.
setUpdatedAt
(
now
);
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_ticket.synPay"
));
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_ticket.synPay"
));
sqlsDataA
.
add
(
orderTickets
.
getSynOrderObject
(
strTime
,
strTime
));
sqlsDataA
.
add
(
orderTickets
.
getSynOrderObject
(
strTime
,
strTime
));
orderTicketStatus
.
setOrderId
(
orderTicketData
.
getOrderTicketsId
());
orderTicketStatus
.
setOrderId
(
orderTicketData
.
getOrderTicketsId
());
orderTicketStatus
.
setStatus
(
KylinTableStatusConst
.
ORDER_STATUS1
);
orderTicketStatus
.
setStatus
(
KylinTableStatusConst
.
ORDER_STATUS1
);
orderTicketStatus
.
setPayStatus
(
syncOrderParam
.
getStatus
());
orderTicketStatus
.
setPayStatus
(
syncOrderParam
.
getStatus
());
orderTicketStatus
.
setUpdatedAt
(
orderTickets
.
getUpdatedAt
());
orderTicketStatus
.
setUpdatedAt
(
orderTickets
.
getUpdatedAt
());
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_ticket_status.synPay"
));
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_ticket_status.synPay"
));
sqlsDataB
.
add
(
orderTicketStatus
.
getSynOrderObject
(
strTime
,
strTime
));
sqlsDataB
.
add
(
orderTicketStatus
.
getSynOrderObject
(
strTime
,
strTime
));
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_ticket_relation.synPay"
));
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_ticket_relation.synPay"
));
sqlsDataC
.
add
(
new
Object
[]{
orderTickets
.
getUpdatedAt
(),
orderTickets
.
getOrderTicketsId
(),
strTime
,
strTime
});
sqlsDataC
.
add
(
new
Object
[]{
orderTickets
.
getUpdatedAt
(),
orderTickets
.
getOrderTicketsId
(),
strTime
,
strTime
});
orderTicketEntities
.
setOrderId
(
orderTicketData
.
getOrderTicketsId
());
orderTicketEntities
.
setIsPayment
(
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT1
);
orderTicketEntities
.
setUpdatedAt
(
orderTickets
.
getUpdatedAt
());
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_ticket_entities.synPay"
));
sqlsDataD
.
add
(
orderTicketEntities
.
getSynOrderObject
(
strTime
,
strTime
));
//vo
HashMap
<
String
,
Object
>
orderTicketVo
=
new
HashMap
<>();
orderTicketVo
.
put
(
"paymentType"
,
orderTickets
.
getPaymentType
());
orderTicketVo
.
put
(
"payCode"
,
orderTickets
.
getPayCode
());
orderTicketVo
.
put
(
"timePay"
,
orderTickets
.
getTimePay
());
orderTicketVo
.
put
(
"qrCode"
,
orderTickets
.
getQrCode
());
orderTicketVo
.
put
(
"status"
,
KylinTableStatusConst
.
ORDER_STATUS1
);
orderTicketVo
.
put
(
"payStatus"
,
orderTicketStatus
.
getStatus
());
orderTicketVo
.
put
(
"updatedAt"
,
timePay
);
orderTicketVo
.
put
(
"changeDate"
,
now
);
mongoTemplate
.
getCollection
(
KylinOrderTicketVo
.
class
.
getSimpleName
()).
updateOne
(
Query
.
query
(
Criteria
.
where
(
"orderTicketsId"
).
is
(
orderTickets
.
getOrderTicketsId
())).
getQueryObject
(),
new
BasicDBObject
(
"$set"
,
mongoConverter
.
convertToMongoType
(
orderTicketVo
))
);
orderTicketEntities
.
setOrderId
(
orderTicketData
.
getOrderTicketsId
());
orderTicketEntities
.
setIsPayment
(
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT1
);
orderTicketEntities
.
setUpdatedAt
(
orderTickets
.
getUpdatedAt
());
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_ticket_entities.synPay"
));
sqlsDataD
.
add
(
orderTicketEntities
.
getSynOrderObject
(
strTime
,
strTime
));
//vo
HashMap
<
String
,
Object
>
orderTicketVo
=
new
HashMap
<>();
orderTicketVo
.
put
(
"paymentType"
,
orderTickets
.
getPaymentType
());
orderTicketVo
.
put
(
"payCode"
,
orderTickets
.
getPayCode
());
orderTicketVo
.
put
(
"timePay"
,
orderTickets
.
getTimePay
());
orderTicketVo
.
put
(
"qrCode"
,
orderTickets
.
getQrCode
());
orderTicketVo
.
put
(
"status"
,
KylinTableStatusConst
.
ORDER_STATUS1
);
orderTicketVo
.
put
(
"payStatus"
,
orderTicketStatus
.
getStatus
());
orderTicketVo
.
put
(
"updatedAt"
,
timePay
);
orderTicketVo
.
put
(
"changeDate"
,
now
);
mongoTemplate
.
getCollection
(
KylinOrderTicketVo
.
class
.
getSimpleName
()).
updateOne
(
Query
.
query
(
Criteria
.
where
(
"orderTicketsId"
).
is
(
orderTickets
.
getOrderTicketsId
())).
getQueryObject
(),
new
BasicDBObject
(
"$set"
,
mongoConverter
.
convertToMongoType
(
orderTicketVo
))
);
HashMap
<
String
,
Object
>
orderTicketEntitiesVo
=
new
HashMap
<>();
orderTicketEntitiesVo
.
put
(
"isPayment"
,
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT1
);
orderTicketEntitiesVo
.
put
(
"updatedAt"
,
timePay
);
orderTicketEntitiesVo
.
put
(
"changeDate"
,
now
);
mongoTemplate
.
getCollection
(
KylinOrderTicketEntitiesVo
.
class
.
getSimpleName
()).
updateMany
(
Query
.
query
(
Criteria
.
where
(
"orderId"
).
is
(
orderTicketData
.
getOrderTicketsId
())).
getQueryObject
(),
new
BasicDBObject
(
"$set"
,
mongoConverter
.
convertToMongoType
(
orderTicketEntitiesVo
))
);
rabbitTemplate
.
convertAndSend
(
MQConst
.
EXCHANGES_LIQUIDNET_SQL_ORDER_PAY
,
MQConst
.
ROUTING_KEY_SQL_ORDER_PAY
,
HashMap
<
String
,
Object
>
orderTicketEntitiesVo
=
new
HashMap
<>();
SqlMapping
.
gets
(
sqls
,
sqlsDataA
,
sqlsDataB
,
sqlsDataC
,
sqlsDataD
));
orderTicketEntitiesVo
.
put
(
"isPayment"
,
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT1
);
orderTicketEntitiesVo
.
put
(
"updatedAt"
,
timePay
);
orderTicketEntitiesVo
.
put
(
"changeDate"
,
now
);
mongoTemplate
.
getCollection
(
KylinOrderTicketEntitiesVo
.
class
.
getSimpleName
()).
updateMany
(
Query
.
query
(
Criteria
.
where
(
"orderId"
).
is
(
orderTicketData
.
getOrderTicketsId
())).
getQueryObject
(),
new
BasicDBObject
(
"$set"
,
mongoConverter
.
convertToMongoType
(
orderTicketEntitiesVo
))
);
//生成vo redis
rabbitTemplate
.
convertAndSend
(
MQConst
.
EXCHANGES_LIQUIDNET_SQL_ORDER_PAY
,
MQConst
.
ROUTING_KEY_SQL_ORDER_PAY
,
dataUtils
.
delOrderTicketRedis
(
orderTickets
.
getOrderTicketsId
());
SqlMapping
.
gets
(
sqls
,
sqlsDataA
,
sqlsDataB
,
sqlsDataC
,
sqlsDataD
));
mongoVoUtils
.
resetOrderListVo
(
orderTicketData
.
getUserId
(),
2
,
orderTicketData
.
getOrderTicketsId
(),
null
);
// 发短信
//生成vo redis
KylinPerformanceVo
performanceData
=
dataUtils
.
getPerformanceVo
(
orderTicketData
.
getPerformanceId
());
dataUtils
.
delOrderTicketRedis
(
orderTickets
.
getOrderTicketsId
());
KylinTicketTimesVo
ticketTimesData
=
null
;
mongoVoUtils
.
resetOrderListVo
(
orderTicketData
.
getUserId
(),
2
,
orderTicketData
.
getOrderTicketsId
(),
null
);
KylinTicketVo
ticketData
=
null
;
for
(
int
x
=
0
;
x
<
performanceData
.
getTicketTimeList
().
size
();
x
++)
{
// 发短信
KylinTicketTimesVo
timeItem
=
performanceData
.
getTicketTimeList
().
get
(
x
);
KylinPerformanceVo
performanceData
=
dataUtils
.
getPerformanceVo
(
orderTicketData
.
getPerformanceId
());
if
(
timeItem
.
getTimeId
().
equals
(
orderTicketData
.
getTimeId
()))
{
KylinTicketTimesVo
ticketTimesData
=
null
;
ticketTimesData
=
timeItem
;
KylinTicketVo
ticketData
=
null
;
for
(
int
y
=
0
;
y
<
ticketTimesData
.
getTicketList
().
size
();
y
++)
{
for
(
int
x
=
0
;
x
<
performanceData
.
getTicketTimeList
().
size
();
x
++)
{
KylinTicketVo
ticketItem
=
ticketTimesData
.
getTicketList
().
get
(
y
);
KylinTicketTimesVo
timeItem
=
performanceData
.
getTicketTimeList
().
get
(
x
);
if
(
ticketItem
.
getTicketsId
().
equals
(
orderTicketData
.
getTicketId
()))
{
if
(
timeItem
.
getTimeId
().
equals
(
orderTicketData
.
getTimeId
()))
{
ticketData
=
ticketItem
;
ticketTimesData
=
timeItem
;
break
;
for
(
int
y
=
0
;
y
<
ticketTimesData
.
getTicketList
().
size
();
y
++)
{
KylinTicketVo
ticketItem
=
ticketTimesData
.
getTicketList
().
get
(
y
);
if
(
ticketItem
.
getTicketsId
().
equals
(
orderTicketData
.
getTicketId
()))
{
ticketData
=
ticketItem
;
break
;
}
}
}
break
;
}
}
break
;
}
}
}
MessageDataVo
dataVo
=
new
MessageDataVo
();
MessageDataVo
dataVo
=
new
MessageDataVo
();
dataVo
.
setName
(
orderTicketData
.
getPerformanceTitle
());
dataVo
.
setName
(
orderTicketData
.
getPerformanceTitle
());
String
time1
=
DateUtil
.
format
(
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
parse
(
ticketData
.
getUseStart
()),
DateUtil
.
Formatter
.
yyyy_MM_dd
);
String
time1
=
DateUtil
.
format
(
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
parse
(
ticketData
.
getUseStart
()),
DateUtil
.
Formatter
.
yyyy_MM_dd
);
String
time2
=
DateUtil
.
format
(
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
parse
(
performanceData
.
getTimeStart
()),
DateUtil
.
Formatter
.
HHmm
);
String
time2
=
DateUtil
.
format
(
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
parse
(
performanceData
.
getTimeStart
()),
DateUtil
.
Formatter
.
HHmm
);
dataVo
.
setTime
(
time1
+
" "
+
time2
);
dataVo
.
setTime
(
time1
+
" "
+
time2
);
MessageConfigVo
configVo
=
new
MessageConfigVo
();
MessageConfigVo
configVo
=
new
MessageConfigVo
();
configVo
.
setStatus
(
true
);
configVo
.
setStatus
(
true
);
if
(
orderTicketData
.
getGetTicketType
().
equals
(
"express"
))
{
if
(
orderTicketData
.
getGetTicketType
().
equals
(
"express"
))
{
configVo
.
setId
(
"SMS_181490473"
);
configVo
.
setId
(
"SMS_181490473"
);
}
else
if
(
orderTicketData
.
getGetTicketType
().
equals
(
"electronic"
))
{
}
else
if
(
orderTicketData
.
getGetTicketType
().
equals
(
"electronic"
))
{
configVo
.
setId
(
ticketData
.
getIsShowCode
()
==
1
?
"SMS_171358560"
:
"SMS_181500419"
);
configVo
.
setId
(
ticketData
.
getIsShowCode
()
==
1
?
"SMS_171358560"
:
"SMS_181500419"
);
}
}
// otherUtils.sendMessage(orderTicketData.getUserMobile(), dataVo, configVo, 1);
// otherUtils.sendMessage(orderTicketData.getUserMobile(), dataVo, configVo, 1);
// 大麦回调
// 大麦回调
sycDamaiOrder
(
orderTickets
.
getOrderTicketsId
());
sycDamaiOrder
(
orderTickets
.
getOrderTicketsId
());
}
redisLockUtil
.
unlock
(
lock
);
log
.
info
(
UserPathDto
.
setData
(
"订单支付成功回调"
,
syncOrderParam
,
""
));
return
"success"
;
}
catch
(
Exception
e
)
{
log
.
error
(
"SYNCE ORDER E = "
+
e
.
getMessage
());
e
.
printStackTrace
();
return
"fail"
;
}
}
redisLockUtil
.
unlock
(
lock
);
log
.
info
(
UserPathDto
.
setData
(
"订单支付成功回调"
,
syncOrderParam
,
""
));
return
"success"
;
}
}
@Override
@Override
...
...
liquidnet-bus-service/liquidnet-service-order/liquidnet-service-order-impl/src/main/java/com/liquidnet/service/order/controller/KylinOrderTicketsController.java
View file @
5c7b9ce5
...
@@ -63,4 +63,18 @@ public class KylinOrderTicketsController {
...
@@ -63,4 +63,18 @@ public class KylinOrderTicketsController {
public
String
syncOrder
(
@ModelAttribute
@Valid
SyncOrderParam
syncOrderParam
)
{
public
String
syncOrder
(
@ModelAttribute
@Valid
SyncOrderParam
syncOrderParam
)
{
return
orderTicketsService
.
syncOrder
(
syncOrderParam
);
return
orderTicketsService
.
syncOrder
(
syncOrderParam
);
}
}
@GetMapping
(
"checkPayment"
)
@ApiOperation
(
"订单状态"
)
@ApiResponse
(
code
=
200
,
message
=
"接口返回对象参数"
)
public
ResponseDto
<
HashMap
>
checkOrderResult
(
@RequestParam
(
"orderId"
)
@NotNull
(
message
=
"订单id不能为空"
)
String
orderId
)
{
Integer
status
=
orderTicketsService
.
checkOrderResult
(
orderId
).
getData
();
if
(
null
==
status
)
{
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"20003"
));
}
else
{
HashMap
<
String
,
Integer
>
map
=
new
HashMap
<>();
map
.
put
(
"status"
,
status
);
return
ResponseDto
.
success
(
map
);
}
}
}
}
liquidnet-bus-service/liquidnet-service-order/liquidnet-service-order-impl/src/main/java/com/liquidnet/service/order/service/impl/KylinOrderTicketsServiceImpl.java
View file @
5c7b9ce5
...
@@ -708,153 +708,159 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
...
@@ -708,153 +708,159 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
@Override
@Override
public
String
syncOrder
(
SyncOrderParam
syncOrderParam
)
{
public
String
syncOrder
(
SyncOrderParam
syncOrderParam
)
{
//支付时间
try
{
LocalDateTime
now
=
LocalDateTime
.
now
();
//支付时间
String
lock
=
"order_lock:"
+
syncOrderParam
.
getOrder_code
();
LocalDateTime
now
=
LocalDateTime
.
now
();
if
(!
redisLockUtil
.
tryLock
(
lock
,
1
,
5
))
{
String
lock
=
"order_lock:"
+
syncOrderParam
.
getOrder_code
();
return
"fail"
;
//参数错误
if
(!
redisLockUtil
.
tryLock
(
lock
,
1
,
5
))
{
}
return
"fail"
;
//参数错误
}
String
timePay
=
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
format
(
now
);
KylinOrderTicketVo
orderTicketData
=
mongoTemplate
.
findOne
(
Query
.
query
(
Criteria
.
where
(
"orderCode"
).
is
(
syncOrderParam
.
getOrder_code
())),
KylinOrderTicketVo
.
class
,
KylinOrderTicketVo
.
class
.
getSimpleName
());
if
(
orderTicketData
==
null
)
{
redisLockUtil
.
unlock
(
lock
);
return
"fail"
;
//订单不存在
}
if
(
orderTicketData
.
getStatus
()
!=
KylinTableStatusConst
.
ORDER_STATUS0
)
{
String
timePay
=
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
format
(
now
);
if
(
orderTicketData
.
getPayCode
().
equals
(
syncOrderParam
.
getCode
())
&&
orderTicketData
.
getStatus
()
==
KylinTableStatusConst
.
ORDER_STATUS1
)
{
KylinOrderTicketVo
orderTicketData
=
mongoTemplate
.
findOne
(
Query
.
query
(
Criteria
.
where
(
"orderCode"
).
is
(
syncOrderParam
.
getOrder_code
())),
KylinOrderTicketVo
.
class
,
KylinOrderTicketVo
.
class
.
getSimpleName
());
if
(
orderTicketData
==
null
)
{
redisLockUtil
.
unlock
(
lock
);
redisLockUtil
.
unlock
(
lock
);
return
"
success"
;
//已经支付
return
"
fail"
;
//订单不存在
}
}
if
(!
orderTicketData
.
getPayCode
().
equals
(
syncOrderParam
.
getCode
()))
{
if
(
orderTicketData
.
getStatus
()
!=
KylinTableStatusConst
.
ORDER_STATUS0
)
{
redisLockUtil
.
unlock
(
lock
);
if
(
orderTicketData
.
getPayCode
().
equals
(
syncOrderParam
.
getCode
())
&&
orderTicketData
.
getStatus
()
==
KylinTableStatusConst
.
ORDER_STATUS1
)
{
return
"fail"
;
//重复支付
redisLockUtil
.
unlock
(
lock
);
return
"success"
;
//已经支付
}
if
(!
orderTicketData
.
getPayCode
().
equals
(
syncOrderParam
.
getCode
()))
{
redisLockUtil
.
unlock
(
lock
);
return
"fail"
;
//重复支付
}
}
}
}
if
(
orderTicketData
.
getPriceActual
().
compareTo
(
syncOrderParam
.
getPrice
())
!=
0
)
{
if
(
orderTicketData
.
getPriceActual
().
compareTo
(
syncOrderParam
.
getPrice
())
!=
0
)
{
redisLockUtil
.
unlock
(
lock
);
redisLockUtil
.
unlock
(
lock
);
return
"fail"
;
//价格不符
return
"fail"
;
//价格不符
}
}
LinkedList
<
String
>
sqls
=
new
LinkedList
<>();
LinkedList
<
String
>
sqls
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataA
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataA
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataB
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataB
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataC
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataC
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataD
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataD
=
new
LinkedList
<>();
LocalDateTime
strTime
=
orderTicketData
.
getChangeDate
();
LocalDateTime
strTime
=
orderTicketData
.
getChangeDate
();
KylinOrderTickets
orderTickets
=
new
KylinOrderTickets
();
KylinOrderTickets
orderTickets
=
new
KylinOrderTickets
();
KylinOrderTicketStatus
orderTicketStatus
=
new
KylinOrderTicketStatus
();
KylinOrderTicketStatus
orderTicketStatus
=
new
KylinOrderTicketStatus
();
KylinOrderTicketEntities
orderTicketEntities
=
new
KylinOrderTicketEntities
();
KylinOrderTicketEntities
orderTicketEntities
=
new
KylinOrderTicketEntities
();
if
(
orderTicketData
.
getStatus
()
==
2
)
{
if
(
orderTicketData
.
getStatus
()
==
2
)
{
mongoVoUtils
.
resetOrderListVo
(
orderTicketData
.
getUserId
(),
2
,
orderTicketData
.
getOrderTicketsId
(),
null
);
mongoVoUtils
.
resetOrderListVo
(
orderTicketData
.
getUserId
(),
2
,
orderTicketData
.
getOrderTicketsId
(),
null
);
log
.
error
(
"订单号位 {} 的订单超时支付"
,
syncOrderParam
.
getOrder_code
());
log
.
error
(
"订单号位 {} 的订单超时支付"
,
syncOrderParam
.
getOrder_code
());
// orderRefundsCallbackService.refundApply(orderTicketData.getOrderTicketsId());
orderRefundsCallbackService
.
refundApply
(
orderTicketData
.
getOrderTicketsId
());
}
else
if
(
orderTicketData
.
getStatus
()
==
3
||
orderTicketData
.
getStatus
()
==
4
)
{
}
else
if
(
orderTicketData
.
getStatus
()
==
3
||
orderTicketData
.
getStatus
()
==
4
)
{
log
.
error
(
"订单号位 {} 的订单正在退款 或者已退款"
,
syncOrderParam
.
getOrder_code
());
log
.
error
(
"订单号位 {} 的订单正在退款 或者已退款"
,
syncOrderParam
.
getOrder_code
());
}
else
{
}
else
{
orderTickets
.
setOrderTicketsId
(
orderTicketData
.
getOrderTicketsId
());
orderTickets
.
setOrderTicketsId
(
orderTicketData
.
getOrderTicketsId
());
orderTickets
.
setPaymentType
(
syncOrderParam
.
getPayment_type
());
orderTickets
.
setPaymentType
(
syncOrderParam
.
getPayment_type
());
orderTickets
.
setPayCode
(
syncOrderParam
.
getCode
());
orderTickets
.
setPayCode
(
syncOrderParam
.
getCode
());
orderTickets
.
setTimePay
(
timePay
);
orderTickets
.
setTimePay
(
timePay
);
orderTickets
.
setQrCode
(
IDGenerator
.
ticketQrCode
(
orderTicketData
.
getOrderTicketsId
()));
orderTickets
.
setQrCode
(
IDGenerator
.
ticketQrCode
(
orderTicketData
.
getOrderTicketsId
()));
orderTickets
.
setUpdatedAt
(
now
);
orderTickets
.
setUpdatedAt
(
now
);
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_ticket.synPay"
));
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_ticket.synPay"
));
sqlsDataA
.
add
(
orderTickets
.
getSynOrderObject
(
strTime
,
strTime
));
sqlsDataA
.
add
(
orderTickets
.
getSynOrderObject
(
strTime
,
strTime
));
orderTicketStatus
.
setOrderId
(
orderTicketData
.
getOrderTicketsId
());
orderTicketStatus
.
setOrderId
(
orderTicketData
.
getOrderTicketsId
());
orderTicketStatus
.
setStatus
(
KylinTableStatusConst
.
ORDER_STATUS1
);
orderTicketStatus
.
setStatus
(
KylinTableStatusConst
.
ORDER_STATUS1
);
orderTicketStatus
.
setPayStatus
(
syncOrderParam
.
getStatus
());
orderTicketStatus
.
setPayStatus
(
syncOrderParam
.
getStatus
());
orderTicketStatus
.
setUpdatedAt
(
orderTickets
.
getUpdatedAt
());
orderTicketStatus
.
setUpdatedAt
(
orderTickets
.
getUpdatedAt
());
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_ticket_status.synPay"
));
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_ticket_status.synPay"
));
sqlsDataB
.
add
(
orderTicketStatus
.
getSynOrderObject
(
strTime
,
strTime
));
sqlsDataB
.
add
(
orderTicketStatus
.
getSynOrderObject
(
strTime
,
strTime
));
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_ticket_relation.synPay"
));
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_ticket_relation.synPay"
));
sqlsDataC
.
add
(
new
Object
[]{
orderTickets
.
getUpdatedAt
(),
orderTickets
.
getOrderTicketsId
(),
strTime
,
strTime
});
sqlsDataC
.
add
(
new
Object
[]{
orderTickets
.
getUpdatedAt
(),
orderTickets
.
getOrderTicketsId
(),
strTime
,
strTime
});
orderTicketEntities
.
setOrderId
(
orderTicketData
.
getOrderTicketsId
());
orderTicketEntities
.
setIsPayment
(
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT1
);
orderTicketEntities
.
setUpdatedAt
(
orderTickets
.
getUpdatedAt
());
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_ticket_entities.synPay"
));
sqlsDataD
.
add
(
orderTicketEntities
.
getSynOrderObject
(
strTime
,
strTime
));
//vo
HashMap
<
String
,
Object
>
orderTicketVo
=
new
HashMap
<>();
orderTicketVo
.
put
(
"paymentType"
,
orderTickets
.
getPaymentType
());
orderTicketVo
.
put
(
"payCode"
,
orderTickets
.
getPayCode
());
orderTicketVo
.
put
(
"timePay"
,
orderTickets
.
getTimePay
());
orderTicketVo
.
put
(
"qrCode"
,
orderTickets
.
getQrCode
());
orderTicketVo
.
put
(
"status"
,
KylinTableStatusConst
.
ORDER_STATUS1
);
orderTicketVo
.
put
(
"payStatus"
,
orderTicketStatus
.
getStatus
());
orderTicketVo
.
put
(
"updatedAt"
,
timePay
);
orderTicketVo
.
put
(
"changeDate"
,
now
);
mongoTemplate
.
getCollection
(
KylinOrderTicketVo
.
class
.
getSimpleName
()).
updateOne
(
Query
.
query
(
Criteria
.
where
(
"orderTicketsId"
).
is
(
orderTickets
.
getOrderTicketsId
())).
getQueryObject
(),
new
BasicDBObject
(
"$set"
,
mongoConverter
.
convertToMongoType
(
orderTicketVo
))
);
orderTicketEntities
.
setOrderId
(
orderTicketData
.
getOrderTicketsId
());
orderTicketEntities
.
setIsPayment
(
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT1
);
orderTicketEntities
.
setUpdatedAt
(
orderTickets
.
getUpdatedAt
());
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_ticket_entities.synPay"
));
sqlsDataD
.
add
(
orderTicketEntities
.
getSynOrderObject
(
strTime
,
strTime
));
//vo
HashMap
<
String
,
Object
>
orderTicketVo
=
new
HashMap
<>();
orderTicketVo
.
put
(
"paymentType"
,
orderTickets
.
getPaymentType
());
orderTicketVo
.
put
(
"payCode"
,
orderTickets
.
getPayCode
());
orderTicketVo
.
put
(
"timePay"
,
orderTickets
.
getTimePay
());
orderTicketVo
.
put
(
"qrCode"
,
orderTickets
.
getQrCode
());
orderTicketVo
.
put
(
"status"
,
KylinTableStatusConst
.
ORDER_STATUS1
);
orderTicketVo
.
put
(
"payStatus"
,
orderTicketStatus
.
getStatus
());
orderTicketVo
.
put
(
"updatedAt"
,
timePay
);
orderTicketVo
.
put
(
"changeDate"
,
now
);
mongoTemplate
.
getCollection
(
KylinOrderTicketVo
.
class
.
getSimpleName
()).
updateOne
(
Query
.
query
(
Criteria
.
where
(
"orderTicketsId"
).
is
(
orderTickets
.
getOrderTicketsId
())).
getQueryObject
(),
new
BasicDBObject
(
"$set"
,
mongoConverter
.
convertToMongoType
(
orderTicketVo
))
);
HashMap
<
String
,
Object
>
orderTicketEntitiesVo
=
new
HashMap
<>();
orderTicketEntitiesVo
.
put
(
"isPayment"
,
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT1
);
orderTicketEntitiesVo
.
put
(
"updatedAt"
,
timePay
);
orderTicketEntitiesVo
.
put
(
"changeDate"
,
now
);
mongoTemplate
.
getCollection
(
KylinOrderTicketEntitiesVo
.
class
.
getSimpleName
()).
updateMany
(
Query
.
query
(
Criteria
.
where
(
"orderId"
).
is
(
orderTicketData
.
getOrderTicketsId
())).
getQueryObject
(),
new
BasicDBObject
(
"$set"
,
mongoConverter
.
convertToMongoType
(
orderTicketEntitiesVo
))
);
rabbitTemplate
.
convertAndSend
(
MQConst
.
EXCHANGES_LIQUIDNET_SQL_ORDER_PAY
,
MQConst
.
ROUTING_KEY_SQL_ORDER_PAY
,
HashMap
<
String
,
Object
>
orderTicketEntitiesVo
=
new
HashMap
<>();
SqlMapping
.
gets
(
sqls
,
sqlsDataA
,
sqlsDataB
,
sqlsDataC
,
sqlsDataD
));
orderTicketEntitiesVo
.
put
(
"isPayment"
,
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT1
);
orderTicketEntitiesVo
.
put
(
"updatedAt"
,
timePay
);
orderTicketEntitiesVo
.
put
(
"changeDate"
,
now
);
mongoTemplate
.
getCollection
(
KylinOrderTicketEntitiesVo
.
class
.
getSimpleName
()).
updateMany
(
Query
.
query
(
Criteria
.
where
(
"orderId"
).
is
(
orderTicketData
.
getOrderTicketsId
())).
getQueryObject
(),
new
BasicDBObject
(
"$set"
,
mongoConverter
.
convertToMongoType
(
orderTicketEntitiesVo
))
);
//生成vo redis
rabbitTemplate
.
convertAndSend
(
MQConst
.
EXCHANGES_LIQUIDNET_SQL_ORDER_PAY
,
MQConst
.
ROUTING_KEY_SQL_ORDER_PAY
,
dataUtils
.
delOrderTicketRedis
(
orderTickets
.
getOrderTicketsId
());
SqlMapping
.
gets
(
sqls
,
sqlsDataA
,
sqlsDataB
,
sqlsDataC
,
sqlsDataD
));
mongoVoUtils
.
resetOrderListVo
(
orderTicketData
.
getUserId
(),
2
,
orderTicketData
.
getOrderTicketsId
(),
null
);
// 发短信
//生成vo redis
KylinPerformanceVo
performanceData
=
dataUtils
.
getPerformanceVo
(
orderTicketData
.
getPerformanceId
());
dataUtils
.
delOrderTicketRedis
(
orderTickets
.
getOrderTicketsId
());
KylinTicketTimesVo
ticketTimesData
=
null
;
mongoVoUtils
.
resetOrderListVo
(
orderTicketData
.
getUserId
(),
2
,
orderTicketData
.
getOrderTicketsId
(),
null
);
KylinTicketVo
ticketData
=
null
;
for
(
int
x
=
0
;
x
<
performanceData
.
getTicketTimeList
().
size
();
x
++)
{
// 发短信
KylinTicketTimesVo
timeItem
=
performanceData
.
getTicketTimeList
().
get
(
x
);
KylinPerformanceVo
performanceData
=
dataUtils
.
getPerformanceVo
(
orderTicketData
.
getPerformanceId
());
if
(
timeItem
.
getTimeId
().
equals
(
orderTicketData
.
getTimeId
()))
{
KylinTicketTimesVo
ticketTimesData
=
null
;
ticketTimesData
=
timeItem
;
KylinTicketVo
ticketData
=
null
;
for
(
int
y
=
0
;
y
<
ticketTimesData
.
getTicketList
().
size
();
y
++)
{
for
(
int
x
=
0
;
x
<
performanceData
.
getTicketTimeList
().
size
();
x
++)
{
KylinTicketVo
ticketItem
=
ticketTimesData
.
getTicketList
().
get
(
y
);
KylinTicketTimesVo
timeItem
=
performanceData
.
getTicketTimeList
().
get
(
x
);
if
(
ticketItem
.
getTicketsId
().
equals
(
orderTicketData
.
getTicketId
()))
{
if
(
timeItem
.
getTimeId
().
equals
(
orderTicketData
.
getTimeId
()))
{
ticketData
=
ticketItem
;
ticketTimesData
=
timeItem
;
break
;
for
(
int
y
=
0
;
y
<
ticketTimesData
.
getTicketList
().
size
();
y
++)
{
KylinTicketVo
ticketItem
=
ticketTimesData
.
getTicketList
().
get
(
y
);
if
(
ticketItem
.
getTicketsId
().
equals
(
orderTicketData
.
getTicketId
()))
{
ticketData
=
ticketItem
;
break
;
}
}
}
break
;
}
}
break
;
}
}
}
MessageDataVo
dataVo
=
new
MessageDataVo
();
MessageDataVo
dataVo
=
new
MessageDataVo
();
dataVo
.
setName
(
orderTicketData
.
getPerformanceTitle
());
dataVo
.
setName
(
orderTicketData
.
getPerformanceTitle
());
String
time1
=
DateUtil
.
format
(
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
parse
(
ticketData
.
getUseStart
()),
DateUtil
.
Formatter
.
yyyy_MM_dd
);
String
time1
=
DateUtil
.
format
(
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
parse
(
ticketData
.
getUseStart
()),
DateUtil
.
Formatter
.
yyyy_MM_dd
);
String
time2
=
DateUtil
.
format
(
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
parse
(
performanceData
.
getTimeStart
()),
DateUtil
.
Formatter
.
HHmm
);
String
time2
=
DateUtil
.
format
(
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
parse
(
performanceData
.
getTimeStart
()),
DateUtil
.
Formatter
.
HHmm
);
dataVo
.
setTime
(
time1
+
" "
+
time2
);
dataVo
.
setTime
(
time1
+
" "
+
time2
);
MessageConfigVo
configVo
=
new
MessageConfigVo
();
MessageConfigVo
configVo
=
new
MessageConfigVo
();
configVo
.
setStatus
(
true
);
configVo
.
setStatus
(
true
);
if
(
orderTicketData
.
getGetTicketType
().
equals
(
"express"
))
{
if
(
orderTicketData
.
getGetTicketType
().
equals
(
"express"
))
{
configVo
.
setId
(
"SMS_181490473"
);
configVo
.
setId
(
"SMS_181490473"
);
}
else
if
(
orderTicketData
.
getGetTicketType
().
equals
(
"electronic"
))
{
}
else
if
(
orderTicketData
.
getGetTicketType
().
equals
(
"electronic"
))
{
configVo
.
setId
(
ticketData
.
getIsShowCode
()
==
1
?
"SMS_171358560"
:
"SMS_181500419"
);
configVo
.
setId
(
ticketData
.
getIsShowCode
()
==
1
?
"SMS_171358560"
:
"SMS_181500419"
);
}
}
// otherUtils.sendMessage(orderTicketData.getUserMobile(), dataVo, configVo, 1);
// otherUtils.sendMessage(orderTicketData.getUserMobile(), dataVo, configVo, 1);
// 大麦回调
// 大麦回调
sycDamaiOrder
(
orderTickets
.
getOrderTicketsId
());
sycDamaiOrder
(
orderTickets
.
getOrderTicketsId
());
}
redisLockUtil
.
unlock
(
lock
);
log
.
info
(
UserPathDto
.
setData
(
"订单支付成功回调"
,
syncOrderParam
,
""
));
return
"success"
;
}
catch
(
Exception
e
)
{
log
.
error
(
"SYNCE ORDER E = "
+
e
.
getMessage
());
e
.
printStackTrace
();
return
"fail"
;
}
}
redisLockUtil
.
unlock
(
lock
);
log
.
info
(
UserPathDto
.
setData
(
"订单支付成功回调"
,
syncOrderParam
,
""
));
return
"success"
;
}
}
@Override
@Override
...
...
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