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
0df7c7e1
Commit
0df7c7e1
authored
Aug 31, 2021
by
ping.wu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
积分商城二期现金支付
parent
73b5a015
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
265 additions
and
8 deletions
+265
-8
order-application-service/src/main/java/cn/freemud/entities/dto/order/FacePayResponseDto.java
+8
-0
order-application-service/src/main/java/cn/freemud/entities/dto/pay/PayOrderDto.java
+30
-0
order-application-service/src/main/java/cn/freemud/entities/dto/pay/PayProductDto.java
+13
-0
order-application-service/src/main/java/cn/freemud/entities/dto/pay/UnifiedOrderRequestDto.java
+46
-0
order-application-service/src/main/java/cn/freemud/service/impl/PointsMallOrderServiceImpl.java
+157
-7
order-application-service/src/main/java/cn/freemud/service/thirdparty/PaymentNewClient.java
+11
-1
No files found.
order-application-service/src/main/java/cn/freemud/entities/dto/order/FacePayResponseDto.java
View file @
0df7c7e1
package
cn
.
freemud
.
entities
.
dto
.
order
;
import
cn.freemud.entities.dto.pay.PayOrderDto
;
import
lombok.Data
;
/**
...
...
@@ -27,4 +28,11 @@ public class FacePayResponseDto {
private
Integer
merchantCoupon
;
private
Integer
platformCoupon
;
// private Integer resultCode;
// private String resultMsg;
private
String
transId
;
// private String fmId;
// private String payCode;
private
PayOrderDto
payOrder
;
}
order-application-service/src/main/java/cn/freemud/entities/dto/pay/PayOrderDto.java
0 → 100644
View file @
0df7c7e1
package
cn
.
freemud
.
entities
.
dto
.
pay
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
lombok.Data
;
@Data
public
class
PayOrderDto
{
private
String
appid
;
@JsonProperty
(
"package"
)
private
String
packageX
;
@JsonProperty
(
"nonce_str"
)
private
String
nonceStr
;
private
String
sign
;
private
String
timestamp
;
private
String
signType
;
private
String
aliPayOrder
;
private
String
paySign
;
private
String
bizContent
;
private
String
thirdPartTradeNo
;
}
order-application-service/src/main/java/cn/freemud/entities/dto/pay/PayProductDto.java
0 → 100644
View file @
0df7c7e1
package
cn
.
freemud
.
entities
.
dto
.
pay
;
import
lombok.Data
;
@Data
public
class
PayProductDto
{
private
String
id
;
private
Integer
quantity
;
private
Long
price
;
private
String
name
;
}
order-application-service/src/main/java/cn/freemud/entities/dto/pay/UnifiedOrderRequestDto.java
0 → 100644
View file @
0df7c7e1
package
cn
.
freemud
.
entities
.
dto
.
pay
;
import
lombok.Data
;
import
java.util.List
;
import
java.util.Map
;
@Data
public
class
UnifiedOrderRequestDto
{
/**
* * {"amount":1800,"body":"蜜雪冰城900507店","businessDate":"20210831","clientCode":130465,"foodOrderType":"pre_order",
* * "notifyUrl":"http://open-store-order-application-service.open-store.svc:9212/order/newPaySuccessCallback","openId":"2088332790804910",
* * "operatorId":"1","partnerId":2080,"payTimeOutTime":"25","products":[{"id":"209430924058928948","name":"鲜橙益菌多","price":900,"quantity":1},
* * {"id":"209516210115815203","name":"芝士奶盖红茶","price":900,"quantity":1}],"stationId":"1","storeId":"900507","transId":"22057814343976884800004",
* * "ver":"2","vipAmount":0}
*/
private
String
ver
=
"2"
;
private
Integer
reqtype
;
private
String
unifyid
;
private
String
partnerId
;
private
String
storeId
;
private
String
stationId
=
"1"
;
private
String
operatorId
=
"1"
;
private
String
transId
;
private
String
openId
;
private
String
businessDate
;
private
Long
clientCode
;
private
Long
amount
;
private
Long
undisAmount
;
private
String
goodsTag
;
private
List
<
PayProductDto
>
products
;
private
String
body
;
private
String
payCode
;
private
String
notifyUrl
;
private
Long
vipAmount
=
0L
;
private
String
foodOrderType
;
private
Integer
invoiceFlag
;
private
Map
<
String
,
String
>
extendParams
;
private
String
divideDetail
;
private
String
payTimeOutTime
;
private
Long
merchantDiscount
;
}
order-application-service/src/main/java/cn/freemud/service/impl/PointsMallOrderServiceImpl.java
View file @
0df7c7e1
...
...
@@ -3,11 +3,16 @@ package cn.freemud.service.impl;
import
cn.freemud.amp.service.SendCouponService
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.base.util.DateUtil
;
import
cn.freemud.constant.RedisKeyConstant
;
import
cn.freemud.constant.ResponseCodeConstant
;
import
cn.freemud.entities.Active
;
import
cn.freemud.entities.dto.BatchQueryActivityInfoRequestDto
;
import
cn.freemud.entities.dto.BatchQueryActivityInfoResponseDto
;
import
cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto
;
import
cn.freemud.entities.dto.order.FacePayResponseDto
;
import
cn.freemud.entities.dto.pay.PayOrderDto
;
import
cn.freemud.entities.dto.pay.PayProductDto
;
import
cn.freemud.entities.dto.pay.UnifiedOrderRequestDto
;
import
cn.freemud.entities.dto.product.pointsmall.*
;
import
cn.freemud.entities.dto.user.CustomerPropertyBaseResponse
;
import
cn.freemud.entities.dto.user.StatislScoreResponse
;
...
...
@@ -19,16 +24,22 @@ import cn.freemud.enums.integralproduct.IntegralProductStatusEnum;
import
cn.freemud.service.CouponService
;
import
cn.freemud.service.PointsMallOrderService
;
import
cn.freemud.service.thirdparty.CustomerPropertyClient
;
import
cn.freemud.service.thirdparty.PaymentNewClient
;
import
cn.freemud.service.thirdparty.PointMallProductClient
;
import
cn.freemud.utils.AppLogUtil
;
import
cn.freemud.utils.ResponseUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformIappWxappStore
;
import
com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformPartnerConfig
;
import
com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo
;
import
com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformIappWxappStoreManager
;
import
com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformPartnerConfigManager
;
import
com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.ordercenter.enums.OrderClientType
;
import
com.freemud.application.sdk.api.ordercenter.enums.OrderSettlementType
;
import
com.freemud.application.sdk.api.ordercenter.enums.OrderType
;
import
com.freemud.application.sdk.api.ordercenter.enums.PayChannelType
;
import
com.freemud.application.sdk.api.ordercenter.request.OrderAffirmReq
;
import
com.freemud.application.sdk.api.ordercenter.request.OrderUserConditionsReq
;
import
com.freemud.application.sdk.api.ordercenter.request.PaySuccessReq
;
...
...
@@ -48,6 +59,7 @@ import com.freemud.sdk.api.assortment.order.request.order.ProductBindingCouponTy
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
java.util.*
;
...
...
@@ -70,6 +82,16 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
private
SendCouponService
sendCouponService
;
@Autowired
private
OrderDownLoadSdkService
orderDownLoadSdkService
;
@Autowired
private
PaymentNewClient
paymentNewClient
;
@Autowired
private
AssortmentOpenPlatformPartnerConfigManager
openPlatformPartnerConfigManager
;
@Autowired
private
AssortmentOpenPlatformIappWxappStoreManager
assortmentOpenPlatformIappWxappStoreManager
;
@Value
(
"${saas.reverseNotifyiDcUrl}"
)
private
String
reverseNotifyiDcUrl
;
@Override
...
...
@@ -83,6 +105,7 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
String
partnerId
=
userLoginInfoDto
.
getPartnerId
();
String
storeId
=
"99999"
;
String
memberId
=
userLoginInfoDto
.
getMemberId
();
String
openId
=
userLoginInfoDto
.
getOpenId
();
String
appId
=
userLoginInfoDto
.
getAppId
();
String
skuId
=
""
;
if
(
CollectionUtils
.
isNotEmpty
(
createOrderVo
.
getProducts
()))
{
...
...
@@ -108,10 +131,8 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
if
(!
Objects
.
equals
(
1
,
integralProductType
.
getExchangeType
()))
{
return
ResponseUtil
.
error
(
ResponseCodeConstant
.
RESPONSE_ERROR_STR
,
"积分商城暂不支持现金兑换"
);
}
// integralProductType.setIntegralPrice(2);
// integralProductType.setCashPrice(0);
// integralProductType.setExchangeType(1);
Integer
points
=
integralProductType
.
getIntegralPrice
();
Integer
cashPrice
=
integralProductType
.
getCashPrice
();
Integer
exchangeType
=
integralProductType
.
getExchangeType
();
boolean
isCoupon
=
integralProductType
.
getProductType
()
==
1
;
WeixinDeliveryAddressDto
weixinDeliveryAddress
=
createOrderVo
.
getWeixinDeliveryAddress
();
...
...
@@ -153,7 +174,35 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
if
(!
Objects
.
equals
(
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
,
createOrderResponseDto
.
getCode
()))
{
return
ResponseUtil
.
error
(
createOrderResponseDto
.
getCode
(),
"创建订单异常"
);
}
String
orderCode
=
createOrderResponseDto
.
getResult
().
getOrderCode
();
OrderInfoReqs
result
=
createOrderResponseDto
.
getResult
();
String
orderCode
=
result
.
getOrderCode
();
CreateOrderResponseVo
createOrderResponseVo
=
new
CreateOrderResponseVo
();
//线上现金支付,创建预支付订单,唤起支付
com
.
freemud
.
application
.
sdk
.
api
.
base
.
BaseResponse
<
FacePayResponseDto
>
response
=
null
;
if
(!
Objects
.
equals
(
1
,
integralProductType
.
getExchangeType
())
&&
cashPrice
!=
null
&&
cashPrice
>
0
)
{
UnifiedOrderRequestDto
requestDto
=
convert2UnifiedOrderRequestDto
(
result
,
openId
,
cashPrice
);
response
=
paymentNewClient
.
unifiedOrder
(
requestDto
);
if
(!
Objects
.
equals
(
ResponseCodeConstant
.
RESPONSE_SUCCESS
,
response
.
getStatusCode
()))
{
return
ResponseUtil
.
error
(
createOrderResponseDto
.
getCode
(),
"支付异常"
);
}
if
(!
Objects
.
equals
(
ResponseCodeConstant
.
RESPONSE_SUCCESS
,
response
.
getData
().
getResultCode
()))
{
return
ResponseUtil
.
error
(
createOrderResponseDto
.
getCode
(),
"支付异常,"
+
response
.
getData
().
getResultMsg
());
}
createOrderResponseVo
.
setOid
(
orderCode
);
createOrderResponseVo
.
setWxappId
(
result
.
getAppId
());
createOrderResponseVo
.
setFmId
(
response
.
getData
().
getFmId
());
PayOrderDto
payOrder
=
response
.
getData
().
getPayOrder
();
if
(
payOrder
!=
null
){
createOrderResponseVo
.
setTimestamp
(
payOrder
.
getTimestamp
());
createOrderResponseVo
.
setNonceStr
(
payOrder
.
getNonceStr
());
createOrderResponseVo
.
setPackageX
(
payOrder
.
getPackageX
());
createOrderResponseVo
.
setSignType
(
payOrder
.
getSignType
());
createOrderResponseVo
.
setSign
(
payOrder
.
getSign
());
createOrderResponseVo
.
setOrderStr
(
payOrder
.
getAliPayOrder
());
}
}
//扣减积分商品商品库存
UpdatePointsMallStocksRequest
updatePointsMallStocksRequest
=
new
UpdatePointsMallStocksRequest
();
updatePointsMallStocksRequest
.
setPartnerId
(
partnerId
);
...
...
@@ -215,9 +264,8 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
createOrderFail
(
false
,
true
,
partnerId
,
memberId
,
orderCode
,
skuId
,
points
,
appId
);
return
ResponseUtil
.
error
(
updateOrderStateResp
.
getCode
(),
"创建订单异常"
);
}
CreateOrderResponseVo
createOrderResponse
=
new
CreateOrderResponseVo
();
createOrderResponse
.
setOid
(
orderCode
);
return
ResponseUtil
.
success
(
createOrderResponse
);
return
ResponseUtil
.
success
(
createOrderResponseVo
);
}
...
...
@@ -539,4 +587,106 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
}
/**
* 预支付接口获取类型
*
* @return
*/
private
String
getFoodOrderType
(
Integer
orderType
)
{
//1=外卖 4=自提,5=堂食
//qr_order(店内扫码点餐),pre_order(预点到店自提),home_delivery (外送到家)
String
foodOrderType
;
switch
(
orderType
)
{
case
1
:
foodOrderType
=
"home_delivery"
;
break
;
case
4
:
foodOrderType
=
"pre_order"
;
break
;
case
5
:
default
:
foodOrderType
=
"qr_order"
;
break
;
}
return
foodOrderType
;
}
/**
* 获取商户支付超时时间
*
* @param partnerId 商户Id
* @return 超时时间
*/
private
String
getPartnerPayOvertime
(
String
partnerId
)
{
return
Optional
.
ofNullable
(
openPlatformPartnerConfigManager
.
selectPartnerConfigByPartnerKey
(
partnerId
,
RedisKeyConstant
.
PARTNER_PAY_OVERTIME
))
.
orElseGet
(()
->
{
AssortmentOpenPlatformPartnerConfig
config
=
new
AssortmentOpenPlatformPartnerConfig
();
config
.
setPartnerValue
(
"30"
);
openPlatformPartnerConfigManager
.
addPartnerConfig
(
partnerId
,
RedisKeyConstant
.
PARTNER_PAY_OVERTIME
,
config
);
return
config
;
}).
getPartnerValue
();
}
private
Long
getPayClientCode
(
String
wxAppId
,
String
storeId
,
String
payCode
,
String
orderClient
){
//抖音支付的payCode = 10066
if
(
Objects
.
equals
(
OrderClientType
.
TIKTOKPAY
.
getIndex
().
toString
(),
orderClient
))
{
payCode
=
PayChannelType
.
TIKTOKPAY
.
getEbcode
();
}
AssortmentOpenPlatformIappWxappStore
wxAppStore
=
assortmentOpenPlatformIappWxappStoreManager
.
selectWxappStoreByWxAppIdAndStoreId
(
wxAppId
,
storeId
,
payCode
);
payCode
=
wxAppStore
!=
null
&&
StringUtils
.
isNotBlank
(
wxAppStore
.
getPayCode
())?
wxAppStore
.
getPayCode
():
null
;
String
clientCode
=
wxAppStore
!=
null
&&
StringUtils
.
isNotBlank
(
wxAppStore
.
getClientCode
())
?
wxAppStore
.
getClientCode
()
:
"0"
;
return
Long
.
parseLong
(
clientCode
);
}
private
UnifiedOrderRequestDto
convert2UnifiedOrderRequestDto
(
OrderInfoReqs
orderInfo
,
String
openId
,
Integer
cashPrice
){
String
partnerId
=
orderInfo
.
getPartnerId
();
String
storeId
=
orderInfo
.
getStoreId
();
String
appId
=
orderInfo
.
getAppId
();
//现金支付唤起线上支付
UnifiedOrderRequestDto
requestDto
=
new
UnifiedOrderRequestDto
();
requestDto
.
setTransId
(
orderInfo
.
getOrderCode
());
requestDto
.
setPartnerId
(
partnerId
);
requestDto
.
setStoreId
(
storeId
);
requestDto
.
setAmount
(
cashPrice
.
longValue
());
String
businessDate
=
DateUtil
.
convert2String
(
new
Date
(),
"yyyyMMdd"
);
requestDto
.
setBusinessDate
(
businessDate
);
requestDto
.
setClientCode
(
getPayClientCode
(
appId
,
storeId
,
null
,
null
));
requestDto
.
setFoodOrderType
(
getFoodOrderType
(
1
));
requestDto
.
setNotifyUrl
(
reverseNotifyiDcUrl
);
requestDto
.
setOpenId
(
openId
);
requestDto
.
setPayTimeOutTime
(
getPartnerPayOvertime
(
partnerId
));
List
<
PayProductDto
>
productBeans
=
new
ArrayList
<>();
String
payProductName
=
""
;
if
(
CollectionUtils
.
isNotEmpty
(
orderInfo
.
getOrderItemList
()))
{
for
(
OrderItemResp
orderProductBean
:
orderInfo
.
getOrderItemList
()){
PayProductDto
productBean
=
new
PayProductDto
();
productBean
.
setId
(
orderProductBean
.
getProductId
());
productBean
.
setQuantity
(
orderProductBean
.
getProductQuantity
());
// productBean.setSeq(orderProductBean.getProductSeq());
// productBean.setSalesType("NORMAL");
productBean
.
setPrice
(
orderProductBean
.
getProductPrice
().
longValue
());
if
(
StringUtils
.
isNotBlank
(
payProductName
)){
payProductName
=
orderProductBean
.
getProductName
();
}
else
if
(
payProductName
.
endsWith
(
"..."
)){
//不处理
}
else
{
payProductName
=
payProductName
+
"..."
;
}
productBean
.
setName
(
orderProductBean
.
getProductName
());
productBeans
.
add
(
productBean
);
}
}
requestDto
.
setBody
(
payProductName
);
return
requestDto
;
}
}
order-application-service/src/main/java/cn/freemud/service/thirdparty/PaymentNewClient.java
View file @
0df7c7e1
package
cn
.
freemud
.
service
.
thirdparty
;
import
cn.freemud.annotations.LogIgnoreFeign
;
import
cn.freemud.constant.ResponseCodeKeyConstant
;
import
cn.freemud.entities.dto.order.FacePayRequestDto
;
import
cn.freemud.entities.dto.order.FacePayResponseDto
;
import
cn.freemud.entities.dto.pay.UnifiedOrderRequestDto
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
...
...
@@ -29,8 +31,16 @@ public interface PaymentNewClient {
/**
* 扫脸支付
*/
@LogIgnoreFeign
(
logMessage
=
"facePay"
)
@LogIgnoreFeign
(
logMessage
=
"facePay"
,
statusCodeFieldName
=
ResponseCodeKeyConstant
.
STATUS_CODE
)
@PostMapping
(
"paymentcenter/facePay"
)
com
.
freemud
.
application
.
sdk
.
api
.
base
.
BaseResponse
<
FacePayResponseDto
>
facePay
(
@RequestBody
FacePayRequestDto
orderPayDto
);
/**
* 创建预支付订单,唤起支付
*/
@LogIgnoreFeign
(
logMessage
=
"unifiedOrder"
,
statusCodeFieldName
=
ResponseCodeKeyConstant
.
STATUS_CODE
)
@PostMapping
(
"paymentcenter/unifiedOrder"
)
com
.
freemud
.
application
.
sdk
.
api
.
base
.
BaseResponse
<
FacePayResponseDto
>
unifiedOrder
(
@RequestBody
UnifiedOrderRequestDto
requestDto
);
}
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