Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gogirl-miniapp-backend
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
huluobin
gogirl-miniapp-backend
Commits
b8c557b5
Commit
b8c557b5
authored
Apr 08, 2020
by
huluobin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
支付接口加锁。
parent
130c84c4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
105 additions
and
83 deletions
+105
-83
PayService.java
...n/java/com/gogirl/application/order/serve/PayService.java
+1
-6
OrderManageServiceImpl.java
.../application/order/serve/impl/OrderManageServiceImpl.java
+22
-25
PayServiceImpl.java
...m/gogirl/application/order/serve/impl/PayServiceImpl.java
+42
-13
PayController.java
src/main/java/com/gogirl/interfaces/xcx/PayController.java
+40
-39
No files found.
src/main/java/com/gogirl/application/order/serve/PayService.java
View file @
b8c557b5
package
com
.
gogirl
.
application
.
order
.
serve
;
import
com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult
;
import
com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult
;
import
com.github.binarywang.wxpay.exception.WxPayException
;
import
com.gogirl.domain.market.discount.DiscountConfig
;
import
com.gogirl.domain.order.serve.OrderManage
;
import
com.gogirl.domain.user.customer.CustomerBalance
;
import
com.gogirl.domain.user.customer.CustomerBalanceRecord
;
import
com.gogirl.shared.member.order.command.BalanceWxPayQuery
;
import
com.gogirl.shared.member.order.query.UnifiedOrderQuery
;
...
...
@@ -62,7 +57,7 @@ public interface PayService {
void
balancePosPay
(
Integer
currentCustomerId
,
Integer
orderId
);
/**
* 选择支付方式
*
更新
选择支付方式
*
* @param orderId
* @param payType
...
...
src/main/java/com/gogirl/application/order/serve/impl/OrderManageServiceImpl.java
View file @
b8c557b5
...
...
@@ -93,15 +93,16 @@ public class OrderManageServiceImpl extends ServiceImpl<OrderManageMapper, Order
private
OrderCommentMapper
orderCommentMapper
;
@Resource
private
OrderCommentLabelMapper
orderCommentLabelMapper
;
@Resource
private
OrderRecordMapper
orderRecordMapper
;
@Resource
private
CustomerMessageMapper
customerMessageMapper
;
@Resource
private
OrderRecordService
orderRecordService
;
@Resource
private
CustomerBalanceMapper
customerBalanceMapper
;
@Resource
private
CustomerBalanceService
customerBalanceService
;
@Resource
private
OrderServeSkuService
orderServeSkuService
;
@Resource
...
...
@@ -116,6 +117,8 @@ public class OrderManageServiceImpl extends ServiceImpl<OrderManageMapper, Order
private
MarketService
marketService
;
@Resource
private
ProducePromotionTimeMapper
producePromotionTimeMapper
;
@Resource
private
CouponService
couponService
;
@Override
public
BigDecimal
countSumPay
(
Integer
customerId
,
Integer
departmentId
)
{
...
...
@@ -455,7 +458,6 @@ public class OrderManageServiceImpl extends ServiceImpl<OrderManageMapper, Order
customer
.
getRealName
());
}
@Override
public
void
recordOrderServeData
(
OrderServe
param
)
{
if
(
param
==
null
||
param
.
getId
()
==
null
)
{
...
...
@@ -543,9 +545,6 @@ public class OrderManageServiceImpl extends ServiceImpl<OrderManageMapper, Order
}
@Resource
private
CouponService
couponService
;
@Override
public
void
recordOrderData
(
Integer
orderId
,
String
remark
,
String
userFeedback
,
String
picturePath
,
String
afterSaleIsBuyCard
,
String
afterSaleBuyCardReason
)
{
...
...
@@ -735,7 +734,6 @@ public class OrderManageServiceImpl extends ServiceImpl<OrderManageMapper, Order
return
orderServeList
;
}
@Override
public
void
updateOrderDataIntegrity
(
OrderManage
om
)
{
...
...
@@ -747,13 +745,9 @@ public class OrderManageServiceImpl extends ServiceImpl<OrderManageMapper, Order
log
.
info
(
"***美甲师发起收款***,美甲师id: {},订单id: {}"
,
technicianId
,
orderId
);
String
payTypeStr
;
//获取订单折扣之后的信息
log
.
info
(
"获取订单信息"
);
OrderManage
orderManage
=
this
.
queryOrder
(
orderId
);
if
(
orderManage
.
getStatus
()
==
3
||
orderManage
.
getStatus
()
==
4
)
{
throw
new
RRException
(
"
重复请求
"
);
throw
new
RRException
(
"
订单状态异常
"
);
}
Customer
customer
=
customerService
.
getById
(
orderManage
.
getOrderUser
());
...
...
@@ -840,11 +834,6 @@ public class OrderManageServiceImpl extends ServiceImpl<OrderManageMapper, Order
}
@Resource
private
CustomerBalanceMapper
customerBalanceMapper
;
@Resource
private
CustomerBalanceService
customerBalanceService
;
@Override
public
void
notifyBalanceWxPayOrder
(
WxPayOrderNotifyResult
result
)
{
String
wxScheduleOrderNo
=
result
.
getOutTradeNo
();
...
...
@@ -950,18 +939,23 @@ public class OrderManageServiceImpl extends ServiceImpl<OrderManageMapper, Order
}
@Resource
private
CustomerMessageMapper
customerMessageMapper
;
@Override
public
void
friendPayOrder
(
Integer
orderId
,
String
phone
)
{
//1、订单状态检查
OrderManage
orderManage
=
this
.
queryOrder
(
orderId
);
if
(!
orderManage
.
getStatus
().
equals
(
OrderManage
.
STATUS_UN_PAY
))
{
throw
new
RRException
(
"订单状态异常"
);
}
//2、朋友用户检查
Integer
currentCustomerId
=
SessionUtils
.
getCustomerToken
().
getCustomerId
();
Customer
customer
=
customerService
.
selectByPhone
(
phone
);
if
(
customer
==
null
)
{
throw
new
RRException
(
500
,
"用户不存在"
);
}
//3、发送代付消息
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
params
.
put
(
CustomerMessage
.
PARAM_FRIEND_PAY_ORDER_ID
,
orderId
);
params
.
put
(
CustomerMessage
.
PARAM_FRIEND_PAY_CUSTOMER_ID
,
currentCustomerId
);
...
...
@@ -983,19 +977,22 @@ public class OrderManageServiceImpl extends ServiceImpl<OrderManageMapper, Order
//保存消息
customerMessageMapper
.
insert
(
customerMessage
);
}
}
@Override
public
OrderManage
queryOrder
(
Integer
id
)
{
//1、getById
OrderManage
orderManage
=
this
.
getById
(
id
);
//2、聚合订单详情
return
this
.
aggregateOrderManage
(
orderManage
);
}
@Override
public
OrderManage
queryOrderByOrderNo
(
String
orderNo
)
{
//1、根据订单号查询订单
OrderManage
orderManage
=
this
.
getOne
(
new
LambdaQueryWrapper
<
OrderManage
>()
.
eq
(
OrderManage:
:
getOrderNo
,
orderNo
));
//2、聚合订单详情
return
this
.
aggregateOrderManage
(
orderManage
);
}
...
...
src/main/java/com/gogirl/application/order/serve/impl/PayServiceImpl.java
View file @
b8c557b5
...
...
@@ -60,9 +60,13 @@ public class PayServiceImpl implements PayService {
@Override
public
void
consumeBalance
(
Integer
currentCustomerId
,
Integer
orderId
)
{
//pre、订单状态检测
OrderManage
orderManage
=
orderManageService
.
queryOrder
(
orderId
);
if
(!
orderManage
.
getStatus
().
equals
(
OrderManage
.
STATUS_UN_PAY
))
{
throw
new
RRException
(
"订单状态异常"
);
}
/*
step1.
扣除余额*/
/*
1、
扣除余额*/
ConsumerCommand
consumerCmd
=
ConsumerCommand
.
builder
()
.
amount
(
orderManage
.
getTotalPaymentAmount
().
multiply
(
new
BigDecimal
(
100
)).
intValue
())
.
customerId
(
currentCustomerId
)
...
...
@@ -72,7 +76,7 @@ public class PayServiceImpl implements PayService {
.
build
();
customerBalanceService
.
consumer
(
consumerCmd
);
/*
step2.更新订单
*/
/*
2、更新订单状态
*/
orderManage
.
setRemark
(
"余额支付"
);
orderManageService
.
updateById
(
orderManage
);
...
...
@@ -118,6 +122,9 @@ public class PayServiceImpl implements PayService {
OrderManage
orderManage
=
orderManageService
.
queryOrder
(
qry
.
getOrderId
());
if
(!
orderManage
.
getStatus
().
equals
(
OrderManage
.
STATUS_UN_PAY
))
{
throw
new
RRException
(
"订单状态异常"
);
}
WxPayOrderQuery
qry2
=
WxPayOrderQuery
.
builder
()
.
currentCustomerId
(
qry
.
getCustomerId
())
...
...
@@ -149,19 +156,23 @@ public class PayServiceImpl implements PayService {
@Override
public
WxPayMpOrderResult
balanceWxPay
(
BalanceWxPayQuery
qry
)
throws
UnknownHostException
,
WxPayException
{
OrderManage
orderManageDTO
=
orderManageService
.
queryOrder
(
qry
.
getOrderId
());
CustomerBalance
customerBalance
=
customerBalanceMapper
.
selectOne
(
new
LambdaQueryWrapper
<
CustomerBalance
>().
eq
(
CustomerBalance:
:
getCustomerId
,
orderManageDTO
.
getOrderUser
()));
//1、订单状态检查
OrderManage
orderManage
=
orderManageService
.
queryOrder
(
qry
.
getOrderId
());
if
(!
orderManage
.
getStatus
().
equals
(
OrderManage
.
STATUS_UN_PAY
))
{
throw
new
RRException
(
"订单状态异常"
);
}
if
(
orderManageDTO
.
getTotalPaymentAmount
().
multiply
(
new
BigDecimal
(
100
)).
intValue
()
<
customerBalance
.
getBalance
())
{
//2、余额检查
CustomerBalance
customerBalance
=
customerBalanceMapper
.
selectOne
(
new
LambdaQueryWrapper
<
CustomerBalance
>().
eq
(
CustomerBalance:
:
getCustomerId
,
orderManage
.
getOrderUser
()));
if
(
orderManage
.
getTotalPaymentAmount
().
multiply
(
new
BigDecimal
(
100
)).
intValue
()
<
customerBalance
.
getBalance
())
{
throw
new
RRException
(
"请使用余额支付"
);
}
BigDecimal
leftTotalPaymentAmount
=
orderManageDTO
.
getTotalPaymentAmount
().
subtract
(
new
BigDecimal
(
customerBalance
.
getBalance
()).
divide
(
new
BigDecimal
(
100
),
2
,
BigDecimal
.
ROUND_HALF_UP
));
//3、微信统一下单
BigDecimal
leftTotalPaymentAmount
=
orderManage
.
getTotalPaymentAmount
().
subtract
(
new
BigDecimal
(
customerBalance
.
getBalance
()).
divide
(
new
BigDecimal
(
100
),
2
,
BigDecimal
.
ROUND_HALF_UP
));
WxPayOrderQuery
wxPayOrderQuery
=
WxPayOrderQuery
.
builder
()
//避免同单不同金额的情况
.
orderNo
(
String
.
format
(
"%06d"
,
leftTotalPaymentAmount
.
multiply
(
new
BigDecimal
(
100
)).
intValue
()).
substring
(
0
,
6
)
+
orderManage
DTO
.
getOrderNo
())
.
orderNo
(
String
.
format
(
"%06d"
,
leftTotalPaymentAmount
.
multiply
(
new
BigDecimal
(
100
)).
intValue
()).
substring
(
0
,
6
)
+
orderManage
.
getOrderNo
())
.
currentCustomerId
(
qry
.
getCustomerId
())
.
openid
(
qry
.
getOpenid
())
.
totalPaymentAmount
(
leftTotalPaymentAmount
)
...
...
@@ -187,17 +198,24 @@ public class PayServiceImpl implements PayService {
@Override
public
void
balancePosPay
(
Integer
currentCustomerId
,
Integer
orderId
)
{
//1、订单状态检查
OrderManage
orderManage
=
orderManageService
.
getById
(
orderId
);
if
(!
orderManage
.
getStatus
().
equals
(
OrderManage
.
STATUS_UN_PAY
))
{
throw
new
RRException
(
"订单状态异常"
);
}
//2、余额检查
CustomerBalance
customerBalance
=
customerBalanceMapper
.
selectOne
(
new
LambdaQueryWrapper
<
CustomerBalance
>().
eq
(
CustomerBalance:
:
getCustomerId
,
currentCustomerId
));
if
(
orderManage
.
getTotalPaymentAmount
().
multiply
(
new
BigDecimal
(
100
)).
intValue
()
<
customerBalance
.
getBalance
())
{
throw
new
RRException
(
"请使用余额支付"
);
}
//申请余额pos支付
orderManage
.
setPaymentType
(
13
);
//3、更新订单
//支付类型:请余额pos支付
orderManage
.
setPaymentType
(
13
);
//多种方式支付字段构建
BigDecimal
balanceAmount
=
new
BigDecimal
(
customerBalance
.
getBalance
()).
divide
(
new
BigDecimal
(
100
),
100
,
BigDecimal
.
ROUND_HALF_UP
);
...
...
@@ -210,20 +228,28 @@ public class PayServiceImpl implements PayService {
//待确认支付
orderManage
.
setStatus
(
8
);
orderManage
.
setUpdateTime
(
new
Date
());
orderManageService
.
updateById
(
orderManage
);
}
@Override
public
void
chosePayType
(
Integer
orderId
,
Integer
payType
)
{
//1、订单状态检查
OrderManage
orderManage
=
orderManageMapper
.
selectById
(
orderId
);
if
(!
orderManage
.
getStatus
().
equals
(
OrderManage
.
STATUS_UN_PAY
))
{
throw
new
RRException
(
"订单状态异常"
);
}
//2、更新订单状态
//客户申请pos机支付
if
(
payType
.
equals
(
5
))
{
//状态待确认
orderManage
.
setStatus
(
OrderManage
.
STATUS_UN_CONFIRM
);
//支付类型状态pos机
orderManage
.
setPaymentType
(
OrderManage
.
PAYMENT_POS
);
orderManage
.
setUpdateTime
(
new
Date
());
orderManageMapper
.
updateById
(
orderManage
);
}
//客户申请团购支付
...
...
@@ -232,8 +258,11 @@ public class PayServiceImpl implements PayService {
orderManage
.
setStatus
(
OrderManage
.
STATUS_UN_CONFIRM
);
//支付类型状态pos机
orderManage
.
setPaymentType
(
OrderManage
.
PAYMENT_DZ
);
orderManage
.
setUpdateTime
(
new
Date
());
orderManageMapper
.
updateById
(
orderManage
);
}
else
{
}
//非法类型
else
{
throw
new
RRException
(
500
,
"invalid payType"
);
}
}
...
...
src/main/java/com/gogirl/interfaces/xcx/PayController.java
View file @
b8c557b5
...
...
@@ -3,24 +3,15 @@ package com.gogirl.interfaces.xcx;
import
com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult
;
import
com.github.binarywang.wxpay.exception.WxPayException
;
import
com.github.pagehelper.PageInfo
;
import
com.gogirl.application.market.DiscountConfigService
;
import
com.gogirl.application.order.member.IChargeOrderService
;
import
com.gogirl.application.order.serve.OrderManageService
;
import
com.gogirl.application.order.serve.PayService
;
import
com.gogirl.application.store.store.CustomerDepartmentRelevanceService
;
import
com.gogirl.application.user.customer.CustomerBalanceService
;
import
com.gogirl.application.user.customer.CustomerService
;
import
com.gogirl.application.xcx.GogirlTokenService
;
import
com.gogirl.domain.user.customer.CustomerBalanceRecord
;
import
com.gogirl.domain.xcx.GogirlToken
;
import
com.gogirl.infrastructure.common.base.JsonResult
;
import
com.gogirl.infrastructure.common.exception.RRException
;
import
com.gogirl.infrastructure.config.property.GogirlProperties
;
import
com.gogirl.infrastructure.feign.wx.WxPayControllerFeign
;
import
com.gogirl.infrastructure.mapper.store.store.UserManageMapper
;
import
com.gogirl.infrastructure.mapper.user.customer.CustomerBalanceMapper
;
import
com.gogirl.infrastructure.mapper.user.customer.CustomerBalanceRecordMapper
;
import
com.gogirl.infrastructure.mapper.user.customer.CustomerMessageMapper
;
import
com.gogirl.infrastructure.util.SessionUtils
;
import
com.gogirl.infrastructure.util.lock.OrderIdLock
;
import
com.gogirl.shared.member.order.command.BalanceWxPayQuery
;
...
...
@@ -43,37 +34,20 @@ import java.util.Optional;
@Slf4j
public
class
PayController
{
/**
* rpc service
*/
private
final
WxPayControllerFeign
wxPayControllerFeign
;
/**
* domain service
*/
private
final
GogirlTokenService
gogirlTokenService
;
private
final
DiscountConfigService
discountConfigService
;
private
final
CustomerBalanceService
balanceService
;
private
final
CustomerService
customer
Service
;
private
final
OrderManageService
orderManage
Service
;
/**
* mapper
*/
private
final
UserManageMapper
userManageMapper
;
private
final
CustomerMessageMapper
customerMessageMapper
;
/**
* cqrs service
*/
private
final
PayService
payService
;
/**
* config
*/
private
final
GogirlProperties
gogirlProperties
;
private
final
OrderManageService
orderManageService
;
private
final
CustomerDepartmentRelevanceService
customerDepartmentRelevanceService
;
private
final
CustomerBalanceMapper
customerBalanceMapper
;
private
final
CustomerBalanceRecordMapper
customerBalanceRecordMapper
;
@ApiOperation
(
value
=
"微信支付预约"
)
@PostMapping
(
"/customer/pay/unifiedOrder"
)
...
...
@@ -84,8 +58,14 @@ public class PayController {
String
openid
=
gogirlTokenService
.
getByToken
(
token
).
getOpenid
();
UnifiedOrderQuery
qry
=
new
UnifiedOrderQuery
(
currentCustomerId
,
orderId
,
openid
);
WxPayMpOrderResult
result
=
payService
.
unifiedOrder
(
qry
);
return
JsonResult
.
success
(
result
);
OrderIdLock
lock
=
OrderIdLock
.
getInsatance
();
try
{
lock
.
lock
(
orderId
);
WxPayMpOrderResult
result
=
payService
.
unifiedOrder
(
qry
);
return
JsonResult
.
success
(
result
);
}
finally
{
lock
.
unlock
(
orderId
);
}
}
@ApiOperation
(
value
=
"会员卡支付预约订单"
)
...
...
@@ -96,7 +76,13 @@ public class PayController {
.
orElseThrow
(()
->
new
RRException
(
500
,
"token不存在"
));
log
.
info
(
"**会员卡支付订单**,会员:{},订单id:{}"
,
currentCustomerId
,
orderId
);
payService
.
consumeBalance
(
currentCustomerId
,
orderId
);
OrderIdLock
lock
=
OrderIdLock
.
getInsatance
();
try
{
lock
.
lock
(
orderId
);
payService
.
consumeBalance
(
currentCustomerId
,
orderId
);
}
finally
{
lock
.
unlock
(
orderId
);
}
return
JsonResult
.
success
();
}
...
...
@@ -107,10 +93,13 @@ public class PayController {
@RequestParam
@NotNull
Integer
payType
)
{
log
.
info
(
"*****用户选择支付方式,支付类型{}"
,
payType
);
Integer
currentCustomerId
=
Optional
.
ofNullable
(
gogirlTokenService
.
getByToken
(
token
).
getCustomerId
())
.
orElseThrow
(()
->
new
RRException
(
500
,
"token不存在"
));
payService
.
chosePayType
(
orderId
,
payType
);
OrderIdLock
lock
=
OrderIdLock
.
getInsatance
();
try
{
lock
.
lock
(
orderId
);
payService
.
chosePayType
(
orderId
,
payType
);
}
finally
{
lock
.
unlock
(
orderId
);
}
return
JsonResult
.
success
();
}
...
...
@@ -125,8 +114,14 @@ public class PayController {
String
openid
=
gogirlTokenService
.
getByToken
(
token
).
getOpenid
();
BalanceWxPayQuery
qry
=
new
BalanceWxPayQuery
(
currentCustomerId
,
orderId
,
openid
);
WxPayMpOrderResult
result
=
payService
.
balanceWxPay
(
qry
);
return
JsonResult
.
success
(
result
);
OrderIdLock
lock
=
OrderIdLock
.
getInsatance
();
try
{
lock
.
lock
(
orderId
);
WxPayMpOrderResult
result
=
payService
.
balanceWxPay
(
qry
);
return
JsonResult
.
success
(
result
);
}
finally
{
lock
.
unlock
(
orderId
);
}
}
@ApiOperation
(
value
=
"预约订单会员余额和pos支付"
)
...
...
@@ -137,13 +132,19 @@ public class PayController {
Integer
currentCustomerId
=
Optional
.
ofNullable
(
gogirlTokenService
.
getByToken
(
token
).
getCustomerId
())
.
orElseThrow
(()
->
new
RRException
(
500
,
"token不存在"
));
log
.
info
(
"**余额pos支付订单**,会员:{},订单id:{} "
,
currentCustomerId
,
orderId
);
payService
.
balancePosPay
(
currentCustomerId
,
orderId
);
OrderIdLock
lock
=
OrderIdLock
.
getInsatance
();
try
{
lock
.
lock
(
orderId
);
payService
.
balancePosPay
(
currentCustomerId
,
orderId
);
}
finally
{
lock
.
unlock
(
orderId
);
}
return
JsonResult
.
success
();
}
private
final
IChargeOrderService
chargeOrderService
;
@ApiOperation
(
value
=
"用户端
,
充值会员卡"
)
@ApiOperation
(
value
=
"用户端充值会员卡"
)
@PostMapping
(
"/customer/pay/chargeBalance"
)
public
JsonResult
<?>
customerChargeBalance
(
@RequestHeader
String
token
,
@RequestParam
Integer
chargeId
)
throws
UnknownHostException
,
WxPayException
{
...
...
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