Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
O
order-group
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
order-group-application
order-group
Commits
8875579c
Commit
8875579c
authored
Nov 18, 2020
by
xiaoer.li@freemud.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
调整混合支付流程
parent
56bd8f8e
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
150 additions
and
316 deletions
+150
-316
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/adapter/OrderSdkAdapter.java
+0
-1
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/request/order/BaseCreateOrderRequest.java
+0
-1
order-application-service/src/main/java/cn/freemud/adapter/OrderAdapter.java
+37
-75
order-application-service/src/main/java/cn/freemud/entities/dto/order/CreatePrepayRequestDto.java
+1
-10
order-application-service/src/main/java/cn/freemud/entities/vo/CreateOrderVo.java
+0
-13
order-application-service/src/main/java/cn/freemud/service/impl/CheckOrder.java
+0
-43
order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
+107
-173
ordercenter-sdk/src/main/java/com/freemud/application/sdk/api/ordercenter/entities/PayItem.java
+5
-0
No files found.
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/adapter/OrderSdkAdapter.java
View file @
8875579c
...
...
@@ -262,7 +262,6 @@ public class OrderSdkAdapter {
//订单重量
Double
orderWeight
=
sumOrderWeight
(
requestVO
.
getProducts
());
request
.
setWeight
(
orderWeight
);
request
.
setOrderPayItemCreateReqList
(
requestVO
.
getOrderPayItemCreateReqList
());
return
request
;
}
...
...
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/request/order/BaseCreateOrderRequest.java
View file @
8875579c
...
...
@@ -166,7 +166,6 @@ public class BaseCreateOrderRequest extends BaseConfig {
* 收货地址Id
*/
private
String
receiveId
;
private
List
<
OrderPayItemCreateReq
>
orderPayItemCreateReqList
;
@Data
public
static
class
DeliveryTypeInfo
{
/**
...
...
order-application-service/src/main/java/cn/freemud/adapter/OrderAdapter.java
View file @
8875579c
...
...
@@ -303,8 +303,6 @@ public class OrderAdapter {
createOrderDto
.
setActivityUpdateStockRequest
(
activityUpdateStockRequest
);
}
createOrderDto
.
setPayChannelType
(
createOrderVo
.
getPayChannelType
());
createOrderDto
.
setOrderPayItemCreateReqList
(
createOrderVo
.
getOrderPayItemCreateReqList
());
// createOrderDto.setOtherInfo(getOrderOtherInfo(shoppingCartGoodsDto));
return
createOrderDto
;
}
...
...
@@ -3361,9 +3359,8 @@ public class OrderAdapter {
,
null
,
createOrderVo
.
getUnionPayCard
()
,
createOrderVo
.
getShopId
()
,
createOrderVo
.
getOrderPayItemCreateReqList
()
,
createOrderVo
.
getCashAmount
()
,
createOrderVo
.
getSvcAmount
());
,
createOrderVo
.
getChannel
()
);
}
public
CreatePrepayRequestDto
convertToCreatePrepayRequestDto
(
String
partnerId
,
String
wxAppId
,
String
openId
...
...
@@ -3375,13 +3372,11 @@ public class OrderAdapter {
,
long
totalAmount
,
int
cardAmount
,
OrderExtInfoDto
orderExtInfoDTO
,
String
transId
,
String
transId
,
OrderClientType
orderClient
,
CreateOrderVo
.
UnionPayCard
unionPayCard
,
String
storeId
,
List
<
OrderPayItemCreateReq
>
payItem
,
BigDecimal
cashAmount
,
BigDecimal
svcAmount
){
,
String
channel
){
CreatePrepayRequestDto
requestDto
=
new
CreatePrepayRequestDto
();
requestDto
.
setPartnerId
(
partnerId
);
requestDto
.
setWxAppId
(
wxAppId
);
...
...
@@ -3398,9 +3393,7 @@ public class OrderAdapter {
requestDto
.
setOrderClient
(
orderClient
);
requestDto
.
setUnionPayCard
(
unionPayCard
);
requestDto
.
setStoreId
(
storeId
);
requestDto
.
setOrderPayItemCreateReqList
(
payItem
);
requestDto
.
setCashAmount
(
cashAmount
);
requestDto
.
setSvcAmount
(
svcAmount
);
requestDto
.
setChannel
(
channel
);
return
requestDto
;
}
...
...
@@ -3505,62 +3498,33 @@ public class OrderAdapter {
return
deleteOrderDto
;
}
/**
* svc卡支付+现金支付
* @param cashAmount
* @param svcAmount
* @param payChannelType
* @return
*/
public
List
<
OrderPayItemCreateReq
>
setOrderPayItem
(
BigDecimal
cashAmount
,
BigDecimal
svcAmount
,
Byte
payChannelType
){
List
<
OrderPayItemCreateReq
>
orderPayItemCreateReqs
=
new
ArrayList
<>(
0
);
OrderPayItemCreateReq
orderPayItemCreateReqSvc
=
new
OrderPayItemCreateReq
();
//svc卡
orderPayItemCreateReqSvc
.
setPayAmount
(
svcAmount
);
orderPayItemCreateReqSvc
.
setPayChannelType
(
PayChannelType
.
SVC
.
getIndex
().
intValue
());
orderPayItemCreateReqSvc
.
setPayChannelName
(
PayChannelType
.
SVC
.
getName
());
orderPayItemCreateReqSvc
.
setPayEbCode
(
PayChannelType
.
SVC
.
getEbcode
());
orderPayItemCreateReqs
.
add
(
orderPayItemCreateReqSvc
);
//现金支付
OrderPayItemCreateReq
orderPayItemCreateReqOther
=
new
OrderPayItemCreateReq
();
orderPayItemCreateReqOther
.
setPayAmount
(
cashAmount
);
orderPayItemCreateReqOther
.
setPayChannelType
(
PayChannelType
.
getByIndex
(
payChannelType
).
getIndex
().
intValue
());
orderPayItemCreateReqOther
.
setPayChannelName
(
PayChannelType
.
getByIndex
(
payChannelType
).
getName
());
orderPayItemCreateReqOther
.
setPayEbCode
(
PayChannelType
.
getByIndex
(
payChannelType
).
getEbcode
());
orderPayItemCreateReqs
.
add
(
orderPayItemCreateReqOther
);
return
orderPayItemCreateReqs
;
}
/**
* 混合支付预支付信息转换
* @param paymentRequest
* @param createPrepayRequestDto
* @param partnerPayOvertime
* @return
*/
public
CombPayRequest
convent2CombPayOrderRequest
(
PaymentRequest
paymentRequest
,
CreatePrepayRequestDto
createPrepayRequestDto
,
String
partnerPayOvertime
,
String
orderClient
)
{
public
CombPayRequest
convent2CombPayOrderRequest
(
String
cardNo
,
QueryOrdersResponse
.
DataBean
.
OrderBean
orderBean
,
PaymentRequest
paymentRequest
,
String
partnerPayOvertime
,
String
orderClient
,
String
channel
,
Integer
totalAmount
,
Integer
svcAmount
,
Integer
svcVAmount
)
{
CombPayRequest
orderPayDto
=
new
CombPayRequest
();
orderPayDto
.
setEbCode
(
paymentRequest
.
getPayCode
());
orderPayDto
.
setPartner_id
(
createPrepayRequestDto
.
getPartner
Id
());
orderPayDto
.
setPartner_id
(
orderBean
.
getCompany
Id
());
orderPayDto
.
setBody
(
paymentRequest
.
getPrincipalName
());
orderPayDto
.
setNotify_url
(
paymentRequest
.
getReverseNotifyiDcUrl
());
orderPayDto
.
setStore_id
(
createPrepayRequestDto
.
getStore
Id
());
orderPayDto
.
setStore_id
(
orderBean
.
getShop
Id
());
orderPayDto
.
setOpen_id
(
paymentRequest
.
getOpenId
());
String
businessDate
=
com
.
freemud
.
application
.
sdk
.
api
.
util
.
DateUtil
.
convert2String
(
new
Date
(),
"yyyyMMdd"
);
orderPayDto
.
setBusiness_date
(
businessDate
);
orderPayDto
.
setAmount
(
createPrepayRequestDto
.
getTotalAmount
());
orderPayDto
.
setAmount
(
totalAmount
.
longValue
());
orderPayDto
.
setVip_amount
(
0L
);
orderPayDto
.
setAppId
(
paymentRequest
.
getWxAppId
());
orderPayDto
.
setPayCode
(
paymentRequest
.
getPayCode
());
orderPayDto
.
setVer
(
"V1"
);
orderPayDto
.
setPayTimeOutTime
(
StringUtils
.
defaultIfBlank
(
partnerPayOvertime
,
"30"
));
List
<
ProductVO
>
productVOS
=
new
ArrayList
<
ProductVO
>();
if
(
CollectionUtils
.
isNotEmpty
(
createPrepayRequestDto
.
getFatherOrderBean
()
.
getProductList
()))
{
for
(
QueryOrdersResponse
.
DataBean
.
OrderBean
.
ProductBean
product
:
createPrepayRequestDto
.
getFatherOrderBean
()
.
getProductList
())
{
if
(
CollectionUtils
.
isNotEmpty
(
orderBean
.
getProductList
()))
{
for
(
QueryOrdersResponse
.
DataBean
.
OrderBean
.
ProductBean
product
:
orderBean
.
getProductList
())
{
ProductVO
productBean
=
new
ProductVO
();
productBean
.
setId
(
product
.
getProductId
());
productBean
.
setQuantity
(
product
.
getNumber
());
...
...
@@ -3573,29 +3537,26 @@ public class OrderAdapter {
}
orderPayDto
.
setProducts
(
productVOS
);
List
<
PayPlatformVO
>
platforms
=
new
ArrayList
<>();
if
(
null
!=
createPrepayRequestDto
.
getOrderPayItemCreateReqList
()
&&
createPrepayRequestDto
.
getOrderPayItemCreateReqList
().
size
()>
0
){
for
(
OrderPayItemCreateReq
orderPayItemCreateReq
:
createPrepayRequestDto
.
getOrderPayItemCreateReqList
())
{
PayPlatformVO
payPlatformVO
=
new
PayPlatformVO
();
payPlatformVO
.
setAmount
(
orderPayItemCreateReq
.
getPayAmount
().
longValue
());
payPlatformVO
.
setEbcode
(
orderPayItemCreateReq
.
getPayEbCode
());
if
(
orderPayItemCreateReq
.
getPayEbCode
().
equals
(
PayChannelType
.
SVC
.
getEbcode
()))
{
payPlatformVO
.
setClientCode
(
orderPayItemCreateReq
.
getPayEbCode
());
}
else
if
(
orderPayItemCreateReq
.
getPayEbCode
().
equals
(
PayChannelType
.
WECHAT
.
getEbcode
()))
{
payPlatformVO
.
setClientCode
(
orderClient
);
}
else
if
(
orderPayItemCreateReq
.
getPayEbCode
().
equals
(
PayChannelType
.
ALIPAY
.
getEbcode
()))
{
payPlatformVO
.
setClientCode
(
orderClient
);
}
platforms
.
add
(
payPlatformVO
);
}
}
Long
svc
=
svcAmount
.
longValue
()+
svcVAmount
.
longValue
();
PayPlatformVO
payPlatformVO
=
new
PayPlatformVO
();
payPlatformVO
.
setClientCode
(
PayChannelType
.
SVC
.
getEbcode
());
payPlatformVO
.
setEbcode
(
PayChannelType
.
SVC
.
getEbcode
());
payPlatformVO
.
setAmount
(
svc
);
platforms
.
add
(
payPlatformVO
);
String
ebcode
=
PayChannelType
.
getByIndex
(
Byte
.
parseByte
(
channel
)).
getEbcode
();
payPlatformVO
=
new
PayPlatformVO
();
payPlatformVO
.
setAmount
(
totalAmount
.
longValue
()
-
svc
);
payPlatformVO
.
setClientCode
(
orderClient
);
payPlatformVO
.
setEbcode
(
ebcode
);
platforms
.
add
(
payPlatformVO
);
orderPayDto
.
setPlatforms
(
platforms
);
orderPayDto
.
setOut_order_no
(
createPrepayRequestDto
.
getFatherOrderBean
()
.
getOid
());
orderPayDto
.
setCardCode
(
c
reatePrepayRequestDto
.
getCardCode
()
);
orderPayDto
.
setOut_order_no
(
orderBean
.
getOid
());
orderPayDto
.
setCardCode
(
c
ardNo
);
return
orderPayDto
;
}
}
/**
* 混合支付返回的支付参数
* @param payPlatforms
...
...
@@ -3630,6 +3591,7 @@ public class OrderAdapter {
PayItem
payItem
=
new
PayItem
();
payItem
.
setFmTradeNo
(
pt
.
getFmTradeNo
());
payItem
.
setPayChannelType
(
PayChannelType
.
getByEbcode
(
pt
.
getEbCode
()).
getIndex
().
intValue
());
//payItem.setPayChannelName(PayChannelType.getByEbcode(pt.getEbCode()).getName());
payItem
.
setTransId
(
pt
.
getTransId
());
payItem
.
setPartnerId
(
partnerId
);
responseDto
.
getPayItem
().
add
(
payItem
);
...
...
order-application-service/src/main/java/cn/freemud/entities/dto/order/CreatePrepayRequestDto.java
View file @
8875579c
...
...
@@ -71,15 +71,6 @@ public class CreatePrepayRequestDto {
* 使用电子风味卡
*/
private
CreateOrderVo
.
UnionPayCard
unionPayCard
;
private
List
<
OrderPayItemCreateReq
>
orderPayItemCreateReqList
;
/**
* svc支付金额
*/
private
BigDecimal
svcAmount
;
/**
* 现金支付金额
*/
private
BigDecimal
cashAmount
;
private
String
storeId
;
private
String
channel
;
}
order-application-service/src/main/java/cn/freemud/entities/vo/CreateOrderVo.java
View file @
8875579c
...
...
@@ -249,19 +249,6 @@ public class CreateOrderVo {
@Valid
@ApiModelProperty
(
value
=
"电子风味卡"
)
private
UnionPayCard
unionPayCard
;
/**
* 混合支付
*/
private
List
<
OrderPayItemCreateReq
>
orderPayItemCreateReqList
=
new
ArrayList
<>();
/**
* svc支付金额
*/
private
BigDecimal
svcAmount
;
/**
* 现金支付金额
*/
private
BigDecimal
cashAmount
;
/**
* 电子风味卡
*/
...
...
order-application-service/src/main/java/cn/freemud/service/impl/CheckOrder.java
View file @
8875579c
...
...
@@ -750,47 +750,4 @@ public class CheckOrder {
// throw new ServiceException(ResponseResult.STORE_ITEM_STOP_BUSINESS);
// }
}
/**
* 混合支付
* @param createOrderVo
* @param shoppingCartGoodsDto
* @param trackingNo
* @return
*/
public
boolean
checkSvcPay
(
CreateOrderVo
createOrderVo
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
,
String
trackingNo
)
{
if
(
StringUtils
.
isBlank
(
createOrderVo
.
getCardCode
()))
{
return
false
;
}
//这么不合规的粗暴搞法 设置支付方式
PayChannelType
payType
=
PayChannelType
.
getByIndex
(
Byte
.
parseByte
(
createOrderVo
.
getChannel
()));
createOrderVo
.
setPayChannelType
(
payType
.
getIndex
());
SVCCardAmountRequest
request
=
new
SVCCardAmountRequest
();
request
.
setPartnerId
(
createOrderVo
.
getPartnerId
());
request
.
setCardCodes
(
Arrays
.
asList
(
createOrderVo
.
getCardCode
()));
BaseResponse
<
SVCCardAmountResponse
>
svcCardAmount
=
paymentNewService
.
querySVCCardAmount
(
request
,
trackingNo
);
if
(
svcCardAmount
==
null
||
svcCardAmount
.
getData
()==
null
||!
ResponseResult
.
SUCCESS
.
getCode
().
equals
(
svcCardAmount
.
getCode
()))
{
throw
new
ServiceException
(
ResponseResult
.
USER_SVC_CARD_ERROR
);
}
Integer
svcAmount
=
0
;
Integer
svcVAmount
=
0
;
Long
totalVAmount
=
shoppingCartGoodsDto
.
getTotalAmount
()
+
shoppingCartGoodsDto
.
getPackageAmount
();
if
(
svcCardAmount
.
getData
().
getData
().
getCardSimpleInfos
().
size
()>
0
)
{
svcAmount
=
svcCardAmount
.
getData
().
getData
().
getCardSimpleInfos
().
get
(
0
).
getAmount
();
svcVAmount
=
svcCardAmount
.
getData
().
getData
().
getCardSimpleInfos
().
get
(
0
).
getVamount
();
//todo : svc卡的金额小于订单金额
if
(
svcAmount
+
svcVAmount
>
0
&&
totalVAmount
>
svcAmount
+
svcVAmount
){
BigDecimal
total
=
new
BigDecimal
(
totalVAmount
);
BigDecimal
svcAmounts
=
new
BigDecimal
(
svcAmount
+
svcVAmount
);
BigDecimal
cashAmout
=
total
.
subtract
(
svcAmounts
);
createOrderVo
.
setOrderPayItemCreateReqList
(
orderAdapter
.
setOrderPayItem
(
cashAmout
,
svcAmounts
,
Byte
.
parseByte
(
createOrderVo
.
getChannel
())));
createOrderVo
.
setPayChannelType
(
PayChannelType
.
COMB
.
getIndex
());
createOrderVo
.
setCashAmount
(
cashAmout
);
createOrderVo
.
setSvcAmount
(
svcAmounts
);
return
true
;
}
}
return
false
;
}
}
order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
View file @
8875579c
...
...
@@ -323,7 +323,6 @@ public class OrderServiceImpl implements Orderservice {
Integer
pushOrderTime
=
checkOrder
.
checkOrderByOrderType
(
createOrderVo
,
userLoginInfoDto
,
storeResponseDto
,
shoppingCartGoodsDto
,
trackingNo
);
OrderExtInfoDto
extInfo
=
getExtInfo
(
userLoginInfoDto
,
storeResponseDto
,
pushOrderTime
,
createOrderVo
,
shoppingCartGoodsDto
);
boolean
svcPay
=
checkOrder
.
checkSvcPay
(
createOrderVo
,
shoppingCartGoodsDto
,
trackingNo
);
//1.9.2套餐需求同步优化创建订单代码
BaseResponse
createOrderOperateDtoResponse
=
this
.
sdkCreateOrder
(
createOrderVo
,
storeResponseDto
,
shoppingCartGoodsDto
,
userLoginInfoDto
);
if
(
createOrderOperateDtoResponse
==
null
||
!
ResponseResult
.
SUCCESS
.
getCode
().
equals
(
createOrderOperateDtoResponse
.
getCode
())
||
createOrderOperateDtoResponse
.
getResult
()
==
null
)
{
...
...
@@ -332,13 +331,7 @@ public class OrderServiceImpl implements Orderservice {
CreateOrderOperateDto
createOrderOperateDto
=
(
CreateOrderOperateDto
)
createOrderOperateDtoResponse
.
getResult
();
//创建支付
CreatePrepayRequestDto
createPrepayRequestDto
=
orderAdapter
.
convertToCreatePrepayRequestDto
(
userLoginInfoDto
,
createOrderVo
,
createOrderOperateDto
,
extInfo
);
if
(
svcPay
)
{
return
this
.
createCombpayOrder
(
createPrepayRequestDto
);
}
else
{
return
this
.
createPrepayOrder
(
createPrepayRequestDto
);
}
return
this
.
createPrepayOrder
(
createPrepayRequestDto
);
}
/**
...
...
@@ -2253,9 +2246,10 @@ public class OrderServiceImpl implements Orderservice {
}
else
if
(
totalAmount
>
0
&&
StringUtils
.
isBlank
(
cardCode
))
{
String
partnerPayOvertime
=
this
.
getPartnerPayOvertime
(
createPrepayRequestDto
.
getPartnerId
());
orderPayResponse
=
getPreOrderPay
(
createPrepayRequestDto
.
getFatherOrderBean
(),
paymentRequest
,
LogThreadLocal
.
getTrackingNo
(),
createPrepayRequestDto
.
getCardAmount
(),
transId
,
partnerPayOvertime
);
}
else
if
(
totalAmount
>
0
&&
StringUtils
.
isNotBlank
(
cardCode
))
{
//svc卡支付
orderPayResponse
=
svcPay
(
cardCode
,
createPrepayRequestDto
.
getFatherOrderBean
(),
paymentRequest
,
transId
,
LogThreadLocal
.
getTrackingNo
());
}
//混合支付+svc卡
else
if
(
totalAmount
>
0
&&
StringUtils
.
isNotBlank
(
cardCode
))
{
orderPayResponse
=
switchSvcOrComb
(
totalAmount
,
cardCode
,
createPrepayRequestDto
.
getFatherOrderBean
(),
paymentRequest
,
transId
,
createPrepayRequestDto
.
getChannel
(),
createPrepayRequestDto
.
getStoreId
(),
LogThreadLocal
.
getTrackingNo
());
}
else
{
// 0元订单如果不需要支付,自定义支付单号
orderPayResponse
=
getOrderPayResponse
(
paymentRequest
,
createPrepayRequestDto
.
getFatherOrderBean
());
...
...
@@ -2301,6 +2295,51 @@ public class OrderServiceImpl implements Orderservice {
}
}
private
OrderPayResponse
switchSvcOrComb
(
Long
totalAmount
,
String
cardCode
,
QueryOrdersResponse
.
DataBean
.
OrderBean
orderBean
,
PaymentRequest
paymentRequest
,
String
transId
,
String
channel
,
String
storeId
,
String
trackingNo
)
{
OrderPayResponse
orderPayResponse
=
new
OrderPayResponse
();
SVCCardAmountRequest
svcRequest
=
new
SVCCardAmountRequest
();
svcRequest
.
setPartnerId
(
orderBean
.
getCompanyId
());
svcRequest
.
setCardCodes
(
Arrays
.
asList
(
cardCode
));
//查询svc卡余额
com
.
freemud
.
application
.
sdk
.
api
.
base
.
BaseResponse
<
SVCCardAmountResponse
>
svcCardAmount
=
paymentNewService
.
querySVCCardAmount
(
svcRequest
,
trackingNo
);
if
(
svcCardAmount
==
null
||
!
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
.
equals
(
svcCardAmount
.
getCode
())
||
svcCardAmount
.
getData
().
getData
()
==
null
||
CollectionUtils
.
isEmpty
(
svcCardAmount
.
getData
().
getData
().
getCardSimpleInfos
()))
{
orderPayResponse
.
setMsg
(
Objects
.
isNull
(
svcCardAmount
)
?
"获取svc卡余额异常"
:
svcCardAmount
.
getMessage
());
return
orderPayResponse
;
}
// 校验金额
Integer
svcAmount
=
svcCardAmount
.
getData
().
getData
().
getCardSimpleInfos
().
get
(
0
).
getAmount
()
;
Integer
svcVAmount
=
svcCardAmount
.
getData
().
getData
().
getCardSimpleInfos
().
get
(
0
).
getVamount
()
;
boolean
tigger
=
false
;
//todo : svc卡的金额小于订单金额
if
(
svcAmount
+
svcVAmount
>
0
&&
totalAmount
>
svcAmount
+
svcVAmount
){
tigger
=
true
;
}
//混合支付
if
(
tigger
)
{
log
.
info
(
"混合支付:"
);
String
partnerPayOvertime
=
this
.
getPartnerPayOvertime
(
orderBean
.
getCompanyId
());
orderPayResponse
=
comPayOrder
(
cardCode
,
orderBean
,
paymentRequest
,
partnerPayOvertime
,
totalAmount
.
intValue
(),
svcAmount
,
svcVAmount
,
channel
,
storeId
,
LogThreadLocal
.
getTrackingNo
());
}
//svc 支付
else
{
log
.
info
(
"svc卡支付"
);
orderPayResponse
=
svcPay
(
cardCode
,
orderBean
,
paymentRequest
,
transId
,
trackingNo
);
}
return
orderPayResponse
;
}
/**
* unionPay card pay
* @param orderBean
...
...
@@ -2414,31 +2453,6 @@ public class OrderServiceImpl implements Orderservice {
return
ResponseUtil
.
error
(
ResponseResultEnum
.
PAY_UNIFIED_ORDER_ERROR
.
getCode
(),
ResponseResultEnum
.
PAY_UNIFIED_ORDER_ERROR
.
getMessage
(),
null
);
}
/**
* 混合预支付
* @param trackingNo
* @param orderBean
* @param cardCode
* @param orderClient
* @param msg
* @return
*/
private
BaseResponse
failCombPreOrderPay
(
String
trackingNo
,
QueryOrdersResponse
.
DataBean
.
OrderBean
orderBean
,
String
cardCode
,
OrderClientType
orderClient
,
String
msg
)
{
List
<
OrderClientType
>
notCancelOrderClientList
=
Lists
.
newArrayList
(
OrderClientType
.
APP
);
if
(!
notCancelOrderClientList
.
contains
(
orderClient
))
{
//失败冲正库存,冲正活动库存,取消订单
CancelOrderRequest
cancelOrderRequest
=
orderAdapter
.
convent2CancelOrderRequest
(
orderBean
.
getOid
(),
orderBean
.
getCompanyId
(),
AfterSalesType
.
SYSTEM_CANCEL
,
StringUtils
.
join
(
new
String
[]{
"获取预支付失败"
,
msg
},
'-'
),
trackingNo
,
null
);
orderCenterSdkService
.
orderCancel
(
cancelOrderRequest
);
// TODO: 2019/9/10 hubowen mq推送变更
backOrdersStatusChange
(
orderBean
.
getOid
(),
orderBean
.
getStatus
());
}
//svc 卡支付失败
//if (StringUtils.isNotBlank(cardCode)) {
// return ResponseUtil.error(ResponseResultEnum.PAY_BACKEND_CONFIG_ERROR.getCode(), ResponseResultEnum.PAY_BACKEND_CONFIG_ERROR.getMessage(), null);
//}
return
ResponseUtil
.
error
(
ResponseResultEnum
.
PAY_UNIFIED_ORDER_ERROR
.
getCode
(),
"获取混合预支付信息失败"
,
null
);
}
public
OrderPayResponse
getPreOrderPay
(
QueryOrdersResponse
.
DataBean
.
OrderBean
orderBean
,
PaymentRequest
paymentRequest
,
String
trackingNo
,
Integer
cardAmount
,
String
transId
,
String
partnerPayOvertime
)
{
OrderPayResponse
orderPayResponse
;
try
{
...
...
@@ -2484,7 +2498,6 @@ public class OrderServiceImpl implements Orderservice {
svcRequest
.
setPartnerId
(
partnerId
);
svcRequest
.
setCardCodes
(
Arrays
.
asList
(
cardCode
));
//查询svc卡余额
log
.
info
(
"svc支付:{}"
,
transId
);
com
.
freemud
.
application
.
sdk
.
api
.
base
.
BaseResponse
<
SVCCardAmountResponse
>
svcCardAmountResponseBaseResponse
=
paymentNewService
.
querySVCCardAmount
(
svcRequest
,
trackingNo
);
if
(
svcCardAmountResponseBaseResponse
==
null
||
!
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
.
equals
(
svcCardAmountResponseBaseResponse
.
getCode
())
||
svcCardAmountResponseBaseResponse
.
getData
().
getData
()
==
null
||
CollectionUtils
.
isEmpty
(
svcCardAmountResponseBaseResponse
.
getData
().
getData
().
getCardSimpleInfos
()))
{
...
...
@@ -2647,9 +2660,7 @@ public class OrderServiceImpl implements Orderservice {
JSONObject
.
toJSONString
(
orderExtInfo
));
orderEditRequest
.
setOrderId
(
orderBean
.
getOid
());
orderEditRequest
.
setTrackingNo
(
trackingNo
);
/**
* 混合支付项
*/
//混合支付项
if
(
CollectionUtils
.
isNotEmpty
(
orderPayResponse
.
getPayItem
()))
{
orderEditRequest
.
setOrderPayItem
(
orderPayResponse
.
getPayItem
());
}
...
...
@@ -3154,157 +3165,80 @@ public class OrderServiceImpl implements Orderservice {
}
/**
* 创建混合支付预支付
*/
public
BaseResponse
createCombpayOrder
(
CreatePrepayRequestDto
createPrepayRequestDto
)
{
CreateOrderResponseVo
createOrderResponse
;
OrderPayResponse
orderPayResponse
=
null
;
PaymentRequest
paymentRequest
=
orderBodyConvertToPaymentBody
(
createPrepayRequestDto
.
getOpenId
()
,
createPrepayRequestDto
.
getPartnerId
()
,
createPrepayRequestDto
.
getWxAppId
()
,
null
);
long
totalAmount
=
createPrepayRequestDto
.
getTotalAmount
();
String
cardCode
=
createPrepayRequestDto
.
getCardCode
();
if
(
totalAmount
<
0
)
{
throw
new
ServiceException
(
ResponseResult
.
PAY_AMOUNT_ERROR
);
}
String
partnerPayOvertime
=
this
.
getPartnerPayOvertime
(
createPrepayRequestDto
.
getPartnerId
());
orderPayResponse
=
comPayOrder
(
paymentRequest
,
createPrepayRequestDto
,
partnerPayOvertime
,
LogThreadLocal
.
getTrackingNo
());
if
(
orderPayResponse
==
null
||
Objects
.
isNull
(
orderPayResponse
.
getFmId
()))
{
log
.
info
(
"混合支付返回:{}"
,
JSON
.
toJSONString
(
orderPayResponse
));
return
failCombPreOrderPay
(
LogThreadLocal
.
getTrackingNo
()
,
createPrepayRequestDto
.
getProductOrderBean
()
,
cardCode
,
createPrepayRequestDto
.
getOrderClient
()
,
Objects
.
isNull
(
orderPayResponse
)
?
null
:
orderPayResponse
.
getMsg
());
}
createOrderResponse
=
orderAdapter
.
convent2CreateFatherSonOrderResponseVo
(
orderPayResponse
,
createPrepayRequestDto
.
getProductOrderBean
());
BaseResponse
baseEditResponse
=
this
.
updateOrderInfo
(
orderPayResponse
,
createPrepayRequestDto
.
getOrderExtInfoDTO
(),
createPrepayRequestDto
.
getProductOrderBean
(),
LogThreadLocal
.
getTrackingNo
());
if
(
baseEditResponse
!=
null
)
{
return
baseEditResponse
;
}
/*
if (totalAmount > 0 && StringUtils.isBlank(cardCode)) {
createOrderResponse.setPaySuccess(false);
} else {
createOrderResponse.setPaySuccess(true);
}
*/
createOrderResponse
.
setPaySuccess
(
false
);
// 推荐优惠插件用户下单数据上报
if
(!
createOrderResponse
.
getPaySuccess
())
{
return
ResponseUtil
.
success
(
createOrderResponse
);
}
else
{
//如果是商品券支付0元,调用回调接口
PaysuccessNoticeMessage
message
=
new
PaysuccessNoticeMessage
();
message
.
setResult_code
(
100
);
message
.
setOut_trade_no
(
createOrderResponse
.
getFmId
());
message
.
setTrans_id
(
createOrderResponse
.
getOid
());
message
.
setTotal_fee
(
0
);
message
.
setOpenid
(
createPrepayRequestDto
.
getOpenId
());
message
.
setPlatform_coupon
(
0
);
message
.
setMerchant_coupon
(
0
);
orderAdapterService
.
paySuccessCallback
(
message
);
return
ResponseUtil
.
success
(
createOrderResponse
);
}
}
/**
* 创建混合支付
* @param orderBean
* @param paymentRequest
* @param createPrepayRequestDto
* @param partnerPayOvertime
* @param totalAmount
* @param svcAmount
* @param svcVAmount
* @param channel
* @param storeId
* @param trackingNo
* @return
*/
private
OrderPayResponse
comPayOrder
(
PaymentRequest
paymentRequest
,
CreatePrepayRequestDto
createPrepayRequestDto
public
OrderPayResponse
comPayOrder
(
String
cardNo
,
QueryOrdersResponse
.
DataBean
.
OrderBean
orderBean
,
PaymentRequest
paymentRequest
,
String
partnerPayOvertime
,
Integer
totalAmount
,
Integer
svcAmount
,
Integer
svcVAmount
,
String
channel
,
String
storeId
,
String
trackingNo
)
{
OrderPayResponse
orderPayResponse
=
null
;
CombPayResponse
responseBase
=
null
;
CombPayRequest
combPayRequest
=
null
;
CombPayResponse
.
PayPlatform
payPlatform
=
null
;
log
.
info
(
"混合支付..."
);
try
{
String
orderClient
=
this
.
getPayCodeByChanel
(
createPrepayRequestDto
);
if
(
StringUtils
.
isBlank
(
orderClient
))
{
orderPayResponse
=
new
OrderPayResponse
();
orderPayResponse
.
setMsg
(
"渠道码没有配置"
);
return
orderPayResponse
;
}
combPayRequest
=
orderAdapter
.
convent2CombPayOrderRequest
(
paymentRequest
,
createPrepayRequestDto
,
partnerPayOvertime
,
orderClient
);
responseBase
=
comPayClient
.
combPay
(
combPayRequest
,
combPayRequest
.
getPartner_id
());
if
(!
ResponseCodeConstant
.
PAYMENT_RESPONSE_SUCCESS
.
equals
(
responseBase
.
getCode
())||
responseBase
.
getData
().
getPayPlatformResponseList
().
size
()==
0
)
{
log
.
info
(
"混合支付返回信息错误,trackingNo:{} request:{} response:{}"
,
trackingNo
,
JSONObject
.
toJSONString
(
combPayRequest
),
JSONObject
.
toJSONString
(
responseBase
));
orderPayResponse
=
new
OrderPayResponse
();
orderPayResponse
.
setMsg
(
responseBase
.
getMsg
());
}
else
{
log
.
info
(
"混合支付请求request:{},response:{}"
,
JSON
.
toJSONString
(
combPayRequest
),
JSON
.
toJSONString
(
responseBase
));
/**
* 生成预支付参数
*/
payPlatform
=
responseBase
.
getData
().
getPayPlatformResponseList
()
.
stream
()
.
filter
(
f
->
!
PayChannelType
.
SVC
.
getEbcode
().
equals
(
f
.
getEbCode
())).
findFirst
()
.
orElse
(
null
);
if
(
payPlatform
==
null
)
{
orderPayResponse
=
new
OrderPayResponse
();
orderPayResponse
.
setMsg
(
"提取现金支付失败"
);
}
else
{
orderPayResponse
=
orderAdapter
.
convent2OrderCombPayResponse
(
responseBase
.
getData
().
getPayPlatformResponseList
(),
createPrepayRequestDto
.
getPartnerId
());
orderPayResponse
.
setOpenId
(
paymentRequest
.
getOpenId
());
orderPayResponse
.
setWxAppid
(
paymentRequest
.
getWxAppId
());
orderPayResponse
.
setPartnerId
(
createPrepayRequestDto
.
getPartnerId
());
orderPayResponse
.
setOrderId
(
createPrepayRequestDto
.
getTransId
());
//隐射关系
redisCache
.
save
(
RedisUtil
.
getPaymentTransIdOrderKey
(
payPlatform
.
getTransId
()),
createPrepayRequestDto
.
getTransId
(),
1L
,
TimeUnit
.
DAYS
);
//加入轮训队列
putDelMq
(
createPrepayRequestDto
.
getPartnerId
()
,
createPrepayRequestDto
.
getStoreId
()
,
orderPayResponse
.
getFmId
()
,
createPrepayRequestDto
.
getTransId
()
,
PayChannelType
.
getByEbcode
(
payPlatform
.
getEbCode
()).
getIndex
().
intValue
());
String
ebCode
=
this
.
getPayCodeByChanel
(
paymentRequest
.
getWxAppId
(),
channel
,
storeId
);
OrderPayResponse
orderPayResponse
=
new
OrderPayResponse
();;
if
(
StringUtils
.
isBlank
(
ebCode
))
{
orderPayResponse
.
setMsg
(
"渠道码没有配置"
);
return
orderPayResponse
;
}
}
}
CombPayRequest
combPayRequest
=
orderAdapter
.
convent2CombPayOrderRequest
(
cardNo
,
orderBean
,
paymentRequest
,
partnerPayOvertime
,
ebCode
,
channel
,
totalAmount
,
svcAmount
,
svcVAmount
);
CombPayResponse
combPayResponse
=
comPayClient
.
combPay
(
combPayRequest
,
combPayRequest
.
getPartner_id
());
if
(!
ResponseCodeConstant
.
PAYMENT_RESPONSE_SUCCESS
.
equals
(
combPayResponse
.
getCode
())||
combPayResponse
.
getData
().
getPayPlatformResponseList
().
size
()==
0
)
{
log
.
info
(
"混合支付返回信息错误,trackingNo:{} request:{} response:{}"
,
trackingNo
,
JSONObject
.
toJSONString
(
combPayRequest
),
JSONObject
.
toJSONString
(
combPayResponse
));
orderPayResponse
.
setMsg
(
combPayResponse
.
getMsg
());
return
orderPayResponse
;
}
catch
(
Exception
e
)
{
log
.
info
(
"混合支付异常..."
);
//TODO 邮件告警
LogUtil
.
error
(
"comPay_error"
,
JSONObject
.
toJSONString
(
responseBase
),
JSONObject
.
toJSONString
(
paymentRequest
),
e
);
orderPayResponse
=
new
OrderPayResponse
();
orderPayResponse
.
setMsg
(
"comPay_error"
);
//生成预支付参数
CombPayResponse
.
PayPlatform
payPlatform
=
combPayResponse
.
getData
().
getPayPlatformResponseList
()
.
stream
()
.
filter
(
f
->
!
PayChannelType
.
SVC
.
getEbcode
().
equals
(
f
.
getEbCode
())).
findFirst
()
.
orElse
(
null
);
if
(
payPlatform
==
null
)
{
orderPayResponse
.
setMsg
(
"支付:现金支付错误"
);
return
orderPayResponse
;
}
orderPayResponse
=
orderAdapter
.
convent2OrderCombPayResponse
(
combPayResponse
.
getData
().
getPayPlatformResponseList
(),
orderBean
.
getCompanyId
());
orderPayResponse
.
setOpenId
(
paymentRequest
.
getOpenId
());
orderPayResponse
.
setWxAppid
(
paymentRequest
.
getWxAppId
());
orderPayResponse
.
setPartnerId
(
orderBean
.
getCompanyId
());
orderPayResponse
.
setOrderId
(
orderBean
.
getOid
());
//隐射关系
redisCache
.
save
(
RedisUtil
.
getPaymentTransIdOrderKey
(
payPlatform
.
getTransId
()),
orderBean
.
getOid
(),
1L
,
TimeUnit
.
DAYS
);
//加入轮训队列
putDelMq
(
orderBean
.
getCompanyId
(),
storeId
,
orderPayResponse
.
getFmId
(),
orderBean
.
getOid
(),
PayChannelType
.
getByEbcode
(
payPlatform
.
getEbCode
()).
getIndex
().
intValue
());
return
orderPayResponse
;
}
/**
* 通过payCode ->clientCode
* @param createPrepayRequestDto
* @param wxAppid
* @param channel
* @param storeId
* @return
*/
private
String
getPayCodeByChanel
(
CreatePrepayRequestDto
createPrepayRequestDto
)
{
if
(
CollectionUtils
.
isEmpty
(
createPrepayRequestDto
.
getOrderPayItemCreateReqList
()))
return
""
;
OrderPayItemCreateReq
payItem
=
createPrepayRequestDto
.
getOrderPayItemCreateReqList
()
.
stream
()
.
filter
(
d
->
!
d
.
getPayEbCode
().
equals
(
PayChannelType
.
SVC
.
getEbcode
()))
.
findFirst
()
.
orElse
(
null
);
if
(
payItem
==
null
)
return
""
;
AssortmentOpenPlatformIappWxappStore
wxAppStore
=
assortmentOpenPlatformIappWxappStoreManager
.
selectWxappStoreByWxAppIdAndStoreId
(
createPrepayRequestDto
.
getWxAppId
()
,
createPrepayRequestDto
.
getStoreId
()
,
payItem
.
getPayEbCode
());
private
String
getPayCodeByChanel
(
String
wxAppid
,
String
channel
,
String
storeId
)
{
if
(
StringUtils
.
isBlank
(
channel
))
return
""
;
PayChannelType
byIndex
=
PayChannelType
.
getByIndex
(
Byte
.
parseByte
(
channel
));
if
(
byIndex
.
getEbcode
()
==
null
)
return
""
;
AssortmentOpenPlatformIappWxappStore
wxAppStore
=
assortmentOpenPlatformIappWxappStoreManager
.
selectWxappStoreByWxAppIdAndStoreId
(
wxAppid
,
storeId
,
byIndex
.
getEbcode
());
if
(
StringUtils
.
isNotBlank
(
wxAppStore
.
getClientCode
()))
{
return
wxAppStore
.
getClientCode
();
}
...
...
ordercenter-sdk/src/main/java/com/freemud/application/sdk/api/ordercenter/entities/PayItem.java
View file @
8875579c
...
...
@@ -20,5 +20,10 @@ public class PayItem {
private
String
partnerId
;
private
String
fmTradeNo
;
private
Integer
payChannelType
;
private
Integer
payChannelName
;
private
String
transId
;
private
String
orderPayItemCode
;
private
String
outOrderNo
;
private
String
platformTradeNo
;
private
String
endTransTradeNo
;
}
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