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
b2aab53f
Commit
b2aab53f
authored
Jun 09, 2022
by
周晓航
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【订C】新增订单退款成功回调接口,需要修改售后单状态(原因:发起退款时支付那边可能是退款中状态,定时任务补偿后需要回调订单)
parent
b85b4c71
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
295 additions
and
164 deletions
+295
-164
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/response/order/MultiOrderRefundResponse.java
+18
-1
order-application-service/src/main/java/cn/freemud/controller/OrderController.java
+11
-0
order-application-service/src/main/java/cn/freemud/entities/vo/RefundSuccessCallbackVo.java
+29
-0
order-application-service/src/main/java/cn/freemud/service/impl/OrderAdapterServiceImpl.java
+38
-30
order-management/src/main/java/cn/freemud/management/adapter/PaymentSdkAdapter.java
+17
-0
order-management/src/main/java/cn/freemud/management/entities/dto/response/pay/AgentPayRefundResp.java
+8
-0
order-management/src/main/java/cn/freemud/management/enums/ResponseResult.java
+2
-0
order-management/src/main/java/cn/freemud/management/service/handle/PaymentHandle.java
+124
-92
order-management/src/main/java/cn/freemud/management/service/handle/SaasOrderHandle.java
+1
-0
order-management/src/main/java/cn/freemud/management/service/impl/SaasOrderMangerServiceImpl.java
+47
-41
No files found.
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/response/order/MultiOrderRefundResponse.java
View file @
b2aab53f
package
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
response
.
order
;
import
com.fasterxml.jackson.annotation.JsonIgnoreProperties
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.util.List
;
...
...
@@ -22,7 +23,16 @@ public class MultiOrderRefundResponse<T> {
}
@Data
public
static
class
RefundPlatformResponse
{
public
static
class
RefundPlatformResponse
{
/**
* 退款中状态码需要单独处理
*/
public
static
Integer
REFUNDED_RESULTCODE
=
8200305
;
/**
* 退款成功
*/
public
static
Integer
REFUND_SUCCESS
=
100
;
private
String
endTransTradeNo
;
private
String
fmRefundNo
;
private
String
fmTradeNo
;
...
...
@@ -39,5 +49,11 @@ public class MultiOrderRefundResponse<T> {
private
Integer
totalAmount
;
private
String
transId
;
private
String
ebcode
;
@ApiModelProperty
(
value
=
"业务返回码 8200305 代表退款中 100是成功 其他 都是失败"
)
private
Integer
resultCode
;
@ApiModelProperty
(
value
=
"业务返回消息"
)
private
String
resultMsg
;
}
}
\ No newline at end of file
order-application-service/src/main/java/cn/freemud/controller/OrderController.java
View file @
b2aab53f
...
...
@@ -556,5 +556,16 @@ public class OrderController {
return
ResponseUtil
.
success
(
orderAdapterService
.
getOrderConfig
(
request
));
}
/**
* 同意退款, 支付服务退款失败的补偿接口
*
* 退款成功会回调该接口进行后续流程补偿
*/
@IsConvertEN
@ApiAnnotation
(
logMessage
=
"/order/refund/callback"
)
@PostMapping
(
"/refund/callback"
)
public
BaseResponse
refundSuccessCallback
(
@Validated
@LogParams
@RequestBody
RefundSuccessCallbackVo
req
)
{
return
orderAdapterService
.
refundSuccessCallback
(
req
);
}
}
order-application-service/src/main/java/cn/freemud/entities/vo/RefundSuccessCallbackVo.java
0 → 100644
View file @
b2aab53f
package
cn
.
freemud
.
entities
.
vo
;
import
javax.validation.constraints.NotBlank
;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2022/6/8 17:38
* @description :
*/
public
class
RefundSuccessCallbackVo
{
/**
* 商户号
*/
@NotBlank
(
message
=
"商户号不能为空"
)
private
String
partnerId
;
/**
* 订单号
*/
@NotBlank
(
message
=
"订单编号不能为空"
)
private
String
orderCode
;
/**
* 退款序列号
*/
private
String
refundId
;
}
order-application-service/src/main/java/cn/freemud/service/impl/OrderAdapterServiceImpl.java
View file @
b2aab53f
...
...
@@ -108,7 +108,7 @@ public class OrderAdapterServiceImpl {
@Autowired
private
MCCafeOrderService
mcCafeOrderService
;
// private UniversalOrderService universalOrderService;
// private UniversalOrderService universalOrderService;
@Autowired
private
CreateOrderServiceFactory
createOrderServiceFactory
;
@Autowired
...
...
@@ -152,7 +152,7 @@ public class OrderAdapterServiceImpl {
private
SvcTransactionClient
svcTransactionClient
;
//获取下单实现对象
private
OrderFactoryService
getCreateOrderBean
(
AssortmentCustomerInfoVo
assortmentCustomerInfoVo
,
CreateOrderVo
createOrderVo
)
{
private
OrderFactoryService
getCreateOrderBean
(
AssortmentCustomerInfoVo
assortmentCustomerInfoVo
,
CreateOrderVo
createOrderVo
)
{
// 扩展字段中存储 sessionKey
createOrderVo
.
setSessionKey
(
assortmentCustomerInfoVo
.
getSessionKey
());
if
(
IappIdType
.
WC_XCX
.
getCode
().
equals
(
assortmentCustomerInfoVo
.
getIappId
()))
{
//i围餐
...
...
@@ -174,7 +174,7 @@ public class OrderAdapterServiceImpl {
}
//抖音卖券
if
(
Objects
.
equals
(
BizTypeEnum
.
SALE_COUPON
.
getBizType
(),
createOrderVo
.
getBizType
()))
{
if
(
Objects
.
equals
(
BizTypeEnum
.
SALE_COUPON
.
getBizType
(),
createOrderVo
.
getBizType
()))
{
return
sellCouponOrderServiceImpl
;
}
return
orderService
;
...
...
@@ -183,6 +183,7 @@ public class OrderAdapterServiceImpl {
/**
* 创建无单 收银订单
* 不需要查询购物车,没有商品,流程上 只需要创建一个订单然后唤起预支付就行了
*
* @param createOrderDto 请求信息
*/
public
CreateOrderResponseVo
createCashierOrder
(
CreateCashierOrderDto
createOrderDto
)
{
...
...
@@ -220,7 +221,7 @@ public class OrderAdapterServiceImpl {
if
(!
LockUtils
.
lock
(
redisCache
.
getRedisTemplate
(),
createOrderKey
,
expire
))
{
return
ResponseUtil
.
error
(
ResponseResult
.
ORDER_NOT_CREATE_ERROR
);
}
OrderFactoryService
orderFactoryService
=
getCreateOrderBean
(
assortmentCustomerInfoVo
,
createOrderVo
);
OrderFactoryService
orderFactoryService
=
getCreateOrderBean
(
assortmentCustomerInfoVo
,
createOrderVo
);
CreateOrderBONew
createOrderBO
=
new
CreateOrderBONew
(
createOrderVo
);
//赋值缓存用户信息
createOrderBO
.
setUserLoginInfoDto
(
assortmentCustomerInfoVo
);
...
...
@@ -320,36 +321,36 @@ public class OrderAdapterServiceImpl {
result
=
orderCommonService
.
paySuccessCallback
(
message
,
confirmOrderDto
,
orderBeans
);
break
;
case
27
:
//抖音卖券订单处理 OrderClientType.TIKTOKPAY.getIndex()
if
(
Objects
.
equals
(
BizTypeEnum
.
SALE_COUPON
.
getBizType
(),
orderBean
.
getBizType
()))
{
if
(
Objects
.
equals
(
BizTypeEnum
.
SALE_COUPON
.
getBizType
(),
orderBean
.
getBizType
()))
{
result
=
sellCouponOrderService
.
paySuccessCallbackForTiktok
(
message
,
confirmOrderDto
,
orderBeans
);
break
;
}
break
;
// bizType不等于4的,非积分商城订单,继续往下走
case
12
:
//app订单 OrderClientType.APP.getIndex()
if
(!
Objects
.
equals
(
BizTypeEnum
.
SALE_COUPON
.
getBizType
(),
orderBean
.
getBizType
()))
{
if
(!
Objects
.
equals
(
BizTypeEnum
.
SALE_COUPON
.
getBizType
(),
orderBean
.
getBizType
()))
{
// bizType为卖券的订单,不走app订单逻辑
result
=
appOrderService
.
paySuccessCallback
(
message
,
confirmOrderDto
,
orderBeans
);
break
;
}
default
:
//微信,支付宝渠道
// 积分商城订单
if
(
Objects
.
equals
(
BizTypeEnum
.
INTEGRAL_MALL
.
getBizType
(),
orderBean
.
getBizType
()))
{
result
=
pointsMallOrderService
.
paySuccessCallback
(
message
,
orderBeans
);
if
(
Objects
.
equals
(
BizTypeEnum
.
INTEGRAL_MALL
.
getBizType
(),
orderBean
.
getBizType
()))
{
result
=
pointsMallOrderService
.
paySuccessCallback
(
message
,
orderBeans
);
break
;
}
// 买券虚拟订单
if
(
Objects
.
equals
(
BizTypeEnum
.
SALE_COUPON
.
getBizType
(),
orderBean
.
getBizType
()))
{
if
(
Objects
.
equals
(
BizTypeEnum
.
SALE_COUPON
.
getBizType
(),
orderBean
.
getBizType
()))
{
result
=
sellCouponOrderService
.
paySuccessCallback
(
message
,
confirmOrderDto
,
orderBeans
);
break
;
}
// 微商城订单处理
if
(
Objects
.
equals
(
BizTypeEnum
.
MALL
.
getBizType
(),
orderBean
.
getBizType
()))
{
if
(
Objects
.
equals
(
BizTypeEnum
.
MALL
.
getBizType
(),
orderBean
.
getBizType
()))
{
result
=
mallOrderService
.
paySuccessCallback
(
message
,
confirmOrderDto
,
orderBeans
);
break
;
}
// 收银单处理
if
(
Objects
.
equals
(
MarketTypeEnum
.
CASHIER
.
getIndex
(),
orderBean
.
getMarketingType
().
intValue
()))
{
if
(
Objects
.
equals
(
MarketTypeEnum
.
CASHIER
.
getIndex
(),
orderBean
.
getMarketingType
().
intValue
()))
{
result
=
cashierOrderService
.
paySuccessCallback
(
message
,
confirmOrderDto
,
orderBeans
);
break
;
}
...
...
@@ -359,16 +360,16 @@ public class OrderAdapterServiceImpl {
break
;
}
// 默认点餐处理(点餐业务和预定业务)
if
(
Objects
.
equals
(
BizTypeEnum
.
ORDINARY
.
getBizType
(),
orderBean
.
getBizType
())
||
Objects
.
equals
(
BizTypeEnum
.
ADVANCE_ORDER
.
getBizType
(),
orderBean
.
getBizType
()))
{
if
(
Objects
.
equals
(
BizTypeEnum
.
ORDINARY
.
getBizType
(),
orderBean
.
getBizType
())
||
Objects
.
equals
(
BizTypeEnum
.
ADVANCE_ORDER
.
getBizType
(),
orderBean
.
getBizType
()))
{
result
=
orderService
.
paySuccessCallback
(
message
,
confirmOrderDto
,
orderBeans
);
break
;
}
}
//储值卡订单消费后通知储值交易服务
if
(
CollectionUtils
.
isNotEmpty
(
message
.
getSvcPayItems
()))
{
sendSvcPayInfoToSvcTransaction
(
message
.
getSvcPayItems
(),
orderBean
.
getCompanyId
(),
orderBean
.
getOid
(),
orderBean
.
getUserId
(),
orderBean
.
getShopId
());
if
(
CollectionUtils
.
isNotEmpty
(
message
.
getSvcPayItems
()))
{
sendSvcPayInfoToSvcTransaction
(
message
.
getSvcPayItems
(),
orderBean
.
getCompanyId
(),
orderBean
.
getOid
(),
orderBean
.
getUserId
(),
orderBean
.
getShopId
());
}
return
result
;
}
catch
(
Exception
e
)
{
...
...
@@ -379,8 +380,8 @@ public class OrderAdapterServiceImpl {
// 增加全局开关,当紧急方案打开时进行直接处理callBack消息
if
(
orderBean
!=
null
&&
orderCenterProperties
.
isUrgentCallbackOpen
())
{
// 查询
OrderCallBackRequestVo
requestVo
=
saasOrderHandle
.
convert2CallbackReq
(
orderBean
.
getOid
(),
2
,
null
,
null
);
ApiLog
.
infoMessage
(
"紧急方案 支付成功直接调用callback,orderCode:{},requestId:{}"
,
requestVo
.
getOrderCode
(),
requestVo
.
getRequestId
());
OrderCallBackRequestVo
requestVo
=
saasOrderHandle
.
convert2CallbackReq
(
orderBean
.
getOid
(),
2
,
null
,
null
);
ApiLog
.
infoMessage
(
"紧急方案 支付成功直接调用callback,orderCode:{},requestId:{}"
,
requestVo
.
getOrderCode
(),
requestVo
.
getRequestId
());
orderCallbackClient
.
callbackOrder
(
requestVo
);
}
}
...
...
@@ -400,21 +401,18 @@ public class OrderAdapterServiceImpl {
// }
// return ResponseUtil.error(ResponseResult.PARAMETER_MISSING);
// }
public
BaseResponse
<
PlugInParameter
>
getPaymentConfig
(
PaymentConfigVo
paymentConfigVo
){
public
BaseResponse
<
PlugInParameter
>
getPaymentConfig
(
PaymentConfigVo
paymentConfigVo
)
{
AssortmentCustomerInfoVo
assortmentCustomerInfoVo
=
assortmentCustomerInfoManager
.
getCustomerInfoByObject
(
paymentConfigVo
.
getSessionId
());
if
(
assortmentCustomerInfoVo
==
null
||
StringUtils
.
isEmpty
(
assortmentCustomerInfoVo
.
getMemberId
()))
{
return
ResponseUtil
.
error
(
ResponseResult
.
NOT_LOGIN
);
}
//周周惠插件要返回参数
if
(
paymentConfigVo
.
getPlugInType
()
!=
null
&&
paymentConfigVo
.
getPlugInType
()
==
2
)
{
return
ResponseUtil
.
success
(
payService
.
getPlugInParameter
(
paymentConfigVo
.
getPartnerId
(),
assortmentCustomerInfoVo
.
getWxAppId
(),
paymentConfigVo
.
getShopId
()));
if
(
paymentConfigVo
.
getPlugInType
()
!=
null
&&
paymentConfigVo
.
getPlugInType
()
==
2
)
{
return
ResponseUtil
.
success
(
payService
.
getPlugInParameter
(
paymentConfigVo
.
getPartnerId
(),
assortmentCustomerInfoVo
.
getWxAppId
(),
paymentConfigVo
.
getShopId
()));
}
//1元插件要返回参数
return
ResponseUtil
.
success
(
payService
.
getPlugInParameter
(
paymentConfigVo
.
getPartnerId
(),
assortmentCustomerInfoVo
.
getWxAppId
()));
return
ResponseUtil
.
success
(
payService
.
getPlugInParameter
(
paymentConfigVo
.
getPartnerId
(),
assortmentCustomerInfoVo
.
getWxAppId
()));
}
...
...
@@ -438,11 +436,11 @@ public class OrderAdapterServiceImpl {
if
(
null
==
configType
)
throw
new
ServiceException
(
ResponseResult
.
PARAMETER_MISSING
);
String
key
=
configType
.
getKey
()
+
request
.
getPartnerId
()+
"_"
+
request
.
getMiniAppId
();
String
key
=
configType
.
getKey
()
+
request
.
getPartnerId
()
+
"_"
+
request
.
getMiniAppId
();
String
configStr
=
redisCache
.
hashGet
(
key
,
configType
.
getType
());
if
(
StringUtils
.
isBlank
(
configStr
)){
if
(
StringUtils
.
isBlank
(
configStr
))
{
OpenPlatformOrderConfig
openPlatformOrderConfig
=
openPlatformOrderConfigManager
.
getOrderConfigByType
(
request
);
if
(
null
!=
openPlatformOrderConfig
){
if
(
null
!=
openPlatformOrderConfig
)
{
configStr
=
openPlatformOrderConfig
.
getTypeValue
();
}
}
...
...
@@ -450,7 +448,7 @@ public class OrderAdapterServiceImpl {
return
configStr
;
}
private
void
sendSvcPayInfoToSvcTransaction
(
List
<
SvcPayItem
>
svcPayItems
,
String
partnerId
,
String
orderCode
,
String
memberId
,
String
storeId
)
{
private
void
sendSvcPayInfoToSvcTransaction
(
List
<
SvcPayItem
>
svcPayItems
,
String
partnerId
,
String
orderCode
,
String
memberId
,
String
storeId
)
{
ConsumeHistoryCreateRequest
request
=
new
ConsumeHistoryCreateRequest
();
try
{
request
.
setPartnerId
(
partnerId
);
...
...
@@ -461,9 +459,19 @@ public class OrderAdapterServiceImpl {
request
.
setCardRequestNo
(
svcTransIds
);
svcTransactionClient
.
consumeHistoryCreate
(
request
);
}
catch
(
Exception
e
)
{
ErrorLog
.
printErrorLog
(
"sendSvcPayInfoToSvcTransaction"
,
"paySuccessCallback"
,
request
,
e
);
}
catch
(
Exception
e
)
{
ErrorLog
.
printErrorLog
(
"sendSvcPayInfoToSvcTransaction"
,
"paySuccessCallback"
,
request
,
e
);
}
}
/**
* 支付退款成功回调
*
* @param req
* @return
*/
public
BaseResponse
refundSuccessCallback
(
RefundSuccessCallbackVo
req
)
{
return
null
;
}
}
order-management/src/main/java/cn/freemud/management/adapter/PaymentSdkAdapter.java
View file @
b2aab53f
package
cn
.
freemud
.
management
.
adapter
;
import
cn.freemud.management.entities.dto.request.pay.AgentPayRefundReq
;
import
cn.freemud.management.entities.dto.request.pay.PayRefundRequestDto
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1
;
import
com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto
;
...
...
@@ -76,6 +78,21 @@ public class PaymentSdkAdapter {
return
multiQueryRequest
;
}
@SneakyThrows
public
AgentPayRefundReq
getAgentPayefundReq
(
OrderBeanV1
orderBean
,
BigDecimal
refundAmount
)
{
OrderExtInfoDto
ext
=
JSON
.
parseObject
(
orderBean
.
getExtInfo
(),
OrderExtInfoDto
.
class
);
AgentPayRefundReq
req
=
new
AgentPayRefundReq
();
req
.
setPartnerId
(
orderBean
.
getCompanyId
());
req
.
setStoreId
(
orderBean
.
getShopId
());
req
.
setFmTradeNo
(
ext
.
getPayTransId
());
req
.
setOutOrderNo
(
orderBean
.
getOid
());
req
.
setRefundTradeNo
(
this
.
getRefundSerialNo
().
toString
());
req
.
setRefundAmount
(
refundAmount
.
longValue
());
req
.
setNotifyUrl
(
refundNotifyCallback
);
req
.
setVer
(
"V1"
);
return
req
;
}
public
Long
getRefundSerialNo
()
{
return
System
.
currentTimeMillis
()
+
(
int
)
(
Math
.
random
()
*
9000
)
+
1000
;
}
...
...
order-management/src/main/java/cn/freemud/management/entities/dto/response/pay/AgentPayRefundResp.java
View file @
b2aab53f
package
cn
.
freemud
.
management
.
entities
.
dto
.
response
.
pay
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
...
...
@@ -20,6 +21,7 @@ public class AgentPayRefundResp {
@NoArgsConstructor
@Data
public
static
class
DataDTO
{
private
String
fmTradeNo
;
private
String
endTransTradeNo
;
private
String
platformTradeNo
;
...
...
@@ -35,6 +37,12 @@ public class AgentPayRefundResp {
private
String
refundTime
;
private
String
transId
;
private
String
ebcode
;
@ApiModelProperty
(
value
=
"业务返回码"
)
private
Integer
resultCode
;
@ApiModelProperty
(
value
=
"业务返回消息"
)
private
String
resultMsg
;
}
public
boolean
isOk
()
{
...
...
order-management/src/main/java/cn/freemud/management/enums/ResponseResult.java
View file @
b2aab53f
...
...
@@ -181,6 +181,8 @@ public enum ResponseResult {
REFUND_EXCEPTION
(
"58004"
,
"支付退款异常"
),
REFUND_FAIL
(
"58005"
,
"支付退款失败"
),
NOT_SUFFICIENT_FUNDS
(
"8200201"
,
"商户余额不足"
),
CHECK_PARAM_ERROR
(
"58006"
,
"支付退款请求参数校验异常"
),
REFUND_FAIL_WAIT_CALLBACK
(
"58007"
,
"支付退款失败,等待回调补偿中"
),
/**
* 优惠券活动
*/
...
...
order-management/src/main/java/cn/freemud/management/service/handle/PaymentHandle.java
View file @
b2aab53f
...
...
@@ -13,7 +13,6 @@ import cn.freemud.management.thirdparty.MulitiPaymentClient;
import
cn.freemud.management.thirdparty.OMSPaymentClient
;
import
cn.freemud.management.util.RedisUtil
;
import
cn.freemud.redis.RedisCache
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformIappWxappStore
;
import
com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformIappWxappStoreManager
;
...
...
@@ -41,6 +40,7 @@ import java.math.BigDecimal;
import
java.util.*
;
import
java.util.concurrent.TimeUnit
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
...
...
@@ -100,25 +100,89 @@ public class PaymentHandle {
if
(
ObjectUtils
.
equals
(
orderBean
.
getAmount
(),
0L
))
{
return
handlePayRefundResponse
(
refundStatus
,
orderRefundRequest
.
getRefundId
());
}
BaseResponse
<
OrderRefundResponse
>
orderRefundResponse
;
// orderRefundResponse = standardPaymentService.orderRefund(orderRefundRequest, LogThreadLocal.getTrackingNo());
orderRefundResponse
=
this
.
orderPayRefund
(
orderRefundRequest
);
BaseResponse
<
OrderRefundResponse
>
orderRefundResponse
=
this
.
orderPayRefund
(
orderRefundRequest
);
if
(
orderRefundResponse
==
null
)
{
throw
new
OrderServiceException
(
ResponseResult
.
REFUND_EXCEPTION
)
;
}
refundStatus
=
PayRefundStatus
.
RUNNING
;
}
else
{
if
(
ObjectUtils
.
notEqual
(
orderRefundResponse
.
getCode
(),
SUCCESS
))
{
//商户余额不足的情况下,返回异常特殊处理.
if
(
ResponseResult
.
NOT_SUFFICIENT_FUNDS
.
getCode
().
equals
(
orderRefundResponse
.
getCode
()))
{
throw
new
OrderServiceException
(
ResponseResult
.
NOT_SUFFICIENT_FUNDS
);
refundStatus
=
PayRefundStatus
.
FAIL
;
}
else
{
Integer
resultCode
=
orderRefundResponse
.
getData
().
getStatusCode
();
refundStatus
=
this
.
getFinalRefundStatus
(
resultCode
);
}
ResponseResult
refundFail
=
ResponseResult
.
REFUND_FAIL
;
refundFail
.
setMessage
(
orderRefundResponse
.
getMessage
());
throw
new
OrderServiceException
(
refundFail
);
}
refundStatus
=
ObjectUtils
.
equals
(
PayRefundStatus
.
SUCCESS
.
getCode
(),
orderRefundResponse
.
getData
().
getRefundStatus
())
?
PayRefundStatus
.
SUCCESS
:
PayRefundStatus
.
RUNNING
;
return
handlePayRefundResponse
(
refundStatus
,
orderRefundRequest
.
getRefundId
());
}
private
PayRefundStatus
getFinalRefundStatus
(
Integer
resultCode
)
{
switch
(
resultCode
)
{
// 退款中状态码需要单独处理
case
8200305
:
return
PayRefundStatus
.
RUNNING
;
// 退款成功
case
100
:
return
PayRefundStatus
.
SUCCESS
;
default
:
return
PayRefundStatus
.
FAIL
;
}
}
private
PayRefundRequestDto
queryWxAppStore
(
BaseResponse
<
PaymentQueryOrderResponseDto
>
payQueryOrderResponse
,
PayRefundRequestDto
refundRequest
)
{
String
payCode
=
null
;
if
(
Objects
.
equals
(
payQueryOrderResponse
.
getCode
(),
"100"
)
&&
payQueryOrderResponse
.
getData
()
!=
null
)
{
refundRequest
.
setTotalAmount
((
payQueryOrderResponse
.
getData
()).
getAmount
());
payCode
=
payQueryOrderResponse
.
getCode
();
}
if
(
refundRequest
.
getTotalAmount
()
==
null
||
refundRequest
.
getTotalAmount
()
==
0L
)
{
refundRequest
.
setTotalAmount
(
refundRequest
.
getRefundAmount
());
}
AssortmentOpenPlatformIappWxappStore
wxAppStore
=
this
.
assortmentOpenPlatformIappWxappStoreManager
.
selectWxappStoreByWxAppIdAndStoreId
(
refundRequest
.
getAppId
(),
refundRequest
.
getStoreId
(),
payCode
);
PayRefundRequestDto
request
=
new
PayRefundRequestDto
();
request
.
setStoreId
(
refundRequest
.
getStoreId
());
request
.
setStationId
(
refundRequest
.
getStationId
());
request
.
setOperatorId
(
refundRequest
.
getOperatorId
());
request
.
setTransId
(
refundRequest
.
getOrgTransId
());
request
.
setBusinessDate
(
refundRequest
.
getBusinessDate
());
request
.
setFmId
(
refundRequest
.
getOrgPayFmId
());
request
.
setTotalAmount
(
refundRequest
.
getTotalAmount
());
request
.
setRefundAmount
(
refundRequest
.
getRefundAmount
());
request
.
setRefundId
(
refundRequest
.
getRefundId
());
request
.
setRefundDesc
(
refundRequest
.
getRefundDesc
());
request
.
setNotifyUrl
(
refundRequest
.
getNotifyUrl
());
request
.
setPartnerId
(
refundRequest
.
getPartnerId
());
request
.
setVer
(
2
);
request
.
setExtendParams
(
refundRequest
.
getExtendParams
());
com
.
freemud
.
application
.
sdk
.
api
.
base
.
BaseResponse
<
OrderRefundResponse
>
checkParam
=
this
.
checkParam
(
refundRequest
.
getPartnerId
(),
refundRequest
.
getStoreId
(),
refundRequest
.
getRefundAmount
(),
wxAppStore
);
if
(!
Objects
.
equals
(
checkParam
.
getCode
(),
"100"
))
{
return
null
;
}
return
request
;
}
/**
* @param refundRequest
* @return
*/
private
BaseResponse
<
PaymentQueryOrderResponseDto
>
queryPayOrder
(
PayRefundRequestDto
refundRequest
)
{
PaymentQueryOrderRequestDto
paymentQueryOrderRequest
=
new
PaymentQueryOrderRequestDto
();
paymentQueryOrderRequest
.
setPartnerId
(
refundRequest
.
getPartnerId
());
paymentQueryOrderRequest
.
setStoreId
(
refundRequest
.
getStoreId
());
paymentQueryOrderRequest
.
setFrontTransId
(
refundRequest
.
getOrgTransId
());
BaseResponse
<
PaymentQueryOrderResponseDto
>
payQueryOrderResponse
=
null
;
try
{
payQueryOrderResponse
=
paymentNewClient
.
payQueryOrder
(
paymentQueryOrderRequest
);
}
catch
(
Exception
e
)
{
cn
.
freemud
.
base
.
log
.
ErrorLog
.
errorConvertJson
(
this
.
getClass
(),
"paymentcenter/queryOrder error"
,
e
);
}
if
(
payQueryOrderResponse
==
null
)
{
return
null
;
}
return
payQueryOrderResponse
;
}
/**
* 代付订单退款
*
...
...
@@ -126,31 +190,29 @@ public class PaymentHandle {
* @return
*/
public
PayRefundResponse
agentPayRefund
(
OrderBeanV1
orderBean
)
{
PayRefundResponse
ret
=
new
PayRefundResponse
();
PayRefundStatus
refundStatus
=
PayRefundStatus
.
SUCCESS
;
String
fmRefundNo
=
""
;
try
{
OrderExtInfoDto
ext
=
JSON
.
parseObject
(
orderBean
.
getExtInfo
(),
OrderExtInfoDto
.
class
);
AgentPayRefundReq
req
=
new
AgentPayRefundReq
();
req
.
setPartnerId
(
orderBean
.
getCompanyId
());
req
.
setStoreId
(
orderBean
.
getShopId
());
req
.
setFmTradeNo
(
ext
.
getPayTransId
());
req
.
setOutOrderNo
(
orderBean
.
getOid
());
req
.
setRefundTradeNo
(
paymentSdkAdapter
.
getRefundSerialNo
().
toString
());
req
.
setRefundAmount
(
this
.
getRefundAmount
(
orderBean
).
longValue
());
req
.
setVer
(
"V1"
);
AgentPayRefundReq
req
=
paymentSdkAdapter
.
getAgentPayefundReq
(
orderBean
,
this
.
getRefundAmount
(
orderBean
));
AgentPayRefundResp
resp
=
mulitiPaymentClient
.
agentPayRefund
(
req
);
logUtil
.
info
(
"fisherman refundRespons ---> "
+
orderBean
.
getOid
()
+
"---"
,
JSON
.
toJSONString
(
req
),
JSON
.
toJSONString
(
resp
));
if
(!
resp
.
isOk
())
throw
new
Exception
(
"退款失败"
);
ret
.
setRefundId
(
resp
.
getData
().
getFmRefundNo
());
ret
.
setPayRefundStatus
(
PayRefundStatus
.
SUCCESS
);
if
(!
resp
.
isOk
())
{
refundStatus
=
PayRefundStatus
.
RUNNING
;
}
AgentPayRefundResp
.
DataDTO
data
=
resp
.
getData
();
if
(
Objects
.
nonNull
(
data
))
{
refundStatus
=
this
.
getFinalRefundStatus
(
data
.
getResultCode
());
}
fmRefundNo
=
resp
.
getData
().
getFmRefundNo
();
}
catch
(
Throwable
e
)
{
re
t
.
setPayRefundStatus
(
PayRefundStatus
.
FAIL
)
;
re
fundStatus
=
PayRefundStatus
.
FAIL
;
}
return
ret
;
return
this
.
handlePayRefundResponse
(
refundStatus
,
fmRefundNo
)
;
}
/**
* 卖券调用退款
*
* @param reason
* @param orderBean
* @return -2正常 -1 不需要退款 0其他异常 1账户余额不足 2 系统异常
...
...
@@ -278,7 +340,7 @@ public class PaymentHandle {
private
PayRefundResponse
handlePayRefundResponse
(
PayRefundStatus
refundStatus
,
String
refundId
)
{
PayRefundResponse
payRefundResponse
=
new
PayRefundResponse
();
payRefundResponse
.
setPayRefundStatus
(
refundStatus
);
payRefundResponse
.
setRefundId
(
refundId
.
toString
()
);
payRefundResponse
.
setRefundId
(
refundId
);
return
payRefundResponse
;
}
...
...
@@ -287,12 +349,29 @@ public class PaymentHandle {
MultiOrderRefundRequest
multiOrderRefundRequest
=
paymentSdkAdapter
.
getMultiOrderPayRefundRequest
(
orderBean
,
getRefundAmount
(
orderBean
));
MultiOrderRefundResponse
multiOrderRefundResponse
=
mulitiPaymentClient
.
paymentApplicationRefund
(
multiOrderRefundRequest
,
orderBean
.
getCompanyId
());
if
(
multiOrderRefundResponse
==
null
||
multiOrderRefundResponse
.
getData
()
==
null
||
!
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
domain
.
ResponseCodeConstant
.
ORDER_PAY_RESPONSE_SUCCESS
.
equals
(
multiOrderRefundResponse
.
getCode
()))
{
throw
new
OrderServiceException
(
ResponseResult
.
REFUND_EXCEPTION
);
// fisherman 退款异常 也当做 退款中处理
refundStatus
=
PayRefundStatus
.
RUNNING
;
}
List
<
MultiOrderRefundResponse
.
RefundPlatformResponse
>
refundPlatformResponseList
=
multiOrderRefundResponse
.
getData
().
refundPlatformResponseList
;
if
(
null
!=
refundPlatformResponseList
&&
refundPlatformResponseList
.
size
()
>
0
)
{
redisCache
.
save
(
RedisUtil
.
getPaymentTransIdSequenceKey
(
refundPlatformResponseList
.
get
(
0
).
getTransId
()),
orderBean
.
getOid
(),
1L
,
TimeUnit
.
DAYS
);
}
if
(
CollectionUtils
.
isNotEmpty
(
refundPlatformResponseList
))
{
long
refundError
=
refundPlatformResponseList
.
stream
()
.
filter
(
s
->
s
.
getResultCode
().
compareTo
(
MultiOrderRefundResponse
.
RefundPlatformResponse
.
REFUNDED_RESULTCODE
)
!=
0
&&
s
.
getResultCode
().
compareTo
(
MultiOrderRefundResponse
.
RefundPlatformResponse
.
REFUND_SUCCESS
)
!=
0
)
.
count
();
if
(
refundError
>
0L
)
{
refundStatus
=
PayRefundStatus
.
FAIL
;
}
// 退款中
long
refunded
=
refundPlatformResponseList
.
stream
()
.
filter
(
s
->
s
.
getResultCode
().
compareTo
(
MultiOrderRefundResponse
.
RefundPlatformResponse
.
REFUNDED_RESULTCODE
)
==
0
)
.
count
();
if
(
refunded
>
0L
)
{
refundStatus
=
PayRefundStatus
.
RUNNING
;
}
}
return
handlePayRefundResponse
(
refundStatus
,
multiOrderRefundRequest
.
getRefundTradeNo
());
}
...
...
@@ -302,70 +381,29 @@ public class PaymentHandle {
*/
public
BaseResponse
<
OrderRefundResponse
>
orderPayRefund
(
PayRefundRequestDto
refundRequest
)
{
PaymentQueryOrderRequestDto
paymentQueryOrderRequest
=
new
PaymentQueryOrderRequestDto
();
paymentQueryOrderRequest
.
setPartnerId
(
refundRequest
.
getPartnerId
());
paymentQueryOrderRequest
.
setStoreId
(
refundRequest
.
getStoreId
());
paymentQueryOrderRequest
.
setFrontTransId
(
refundRequest
.
getOrgTransId
());
BaseResponse
<
PaymentQueryOrderResponseDto
>
payQueryOrderResponse
=
null
;
try
{
payQueryOrderResponse
=
paymentNewClient
.
payQueryOrder
(
paymentQueryOrderRequest
);
}
catch
(
Exception
e
){
cn
.
freemud
.
base
.
log
.
ErrorLog
.
errorConvertJson
(
this
.
getClass
(),
"paymentcenter/queryOrder error"
,
e
);
}
if
(
payQueryOrderResponse
==
null
){
return
null
;
}
Long
vipAmount
=
0L
;
String
payCode
=
null
;
if
(
Objects
.
equals
(
payQueryOrderResponse
.
getCode
(),
"100"
)
&&
payQueryOrderResponse
.
getData
()
!=
null
)
{
if
((
payQueryOrderResponse
.
getData
()).
getVipAmount
()
!=
null
&&
(
payQueryOrderResponse
.
getData
()).
getVipAmount
()
!=
0
)
{
vipAmount
=
(
long
)
(
payQueryOrderResponse
.
getData
()).
getVipAmount
();
}
refundRequest
.
setTotalAmount
((
payQueryOrderResponse
.
getData
()).
getAmount
());
payCode
=
payQueryOrderResponse
.
getCode
();
// step1 查询支付
BaseResponse
<
PaymentQueryOrderResponseDto
>
paymentQueryOrderResponseDtoBaseResponse
=
this
.
queryPayOrder
(
refundRequest
);
if
(
Objects
.
isNull
(
paymentQueryOrderResponseDtoBaseResponse
))
{
throw
new
OrderServiceException
(
ResponseResult
.
REFUND_EXCEPTION
);
}
if
(
refundRequest
.
getTotalAmount
()
==
null
||
refundRequest
.
getTotalAmount
()
==
0L
)
{
refundRequest
.
setTotalAmount
(
refundRequest
.
getRefundAmount
());
// step2 查询退款配置
PayRefundRequestDto
request
=
this
.
queryWxAppStore
(
paymentQueryOrderResponseDtoBaseResponse
,
refundRequest
);
if
(
Objects
.
isNull
(
request
))
{
throw
new
OrderServiceException
(
ResponseResult
.
CHECK_PARAM_ERROR
);
}
AssortmentOpenPlatformIappWxappStore
wxAppStore
=
this
.
assortmentOpenPlatformIappWxappStoreManager
.
selectWxappStoreByWxAppIdAndStoreId
(
refundRequest
.
getAppId
(),
refundRequest
.
getStoreId
(),
payCode
);
PayRefundRequestDto
request
=
new
PayRefundRequestDto
();
request
.
setStoreId
(
refundRequest
.
getStoreId
());
request
.
setStationId
(
refundRequest
.
getStationId
());
request
.
setOperatorId
(
refundRequest
.
getOperatorId
());
request
.
setTransId
(
refundRequest
.
getOrgTransId
());
request
.
setBusinessDate
(
refundRequest
.
getBusinessDate
());
request
.
setFmId
(
refundRequest
.
getOrgPayFmId
());
request
.
setTotalAmount
(
refundRequest
.
getTotalAmount
());
request
.
setRefundAmount
(
refundRequest
.
getRefundAmount
());
request
.
setRefundId
(
refundRequest
.
getRefundId
());
request
.
setRefundDesc
(
refundRequest
.
getRefundDesc
());
request
.
setNotifyUrl
(
refundRequest
.
getNotifyUrl
());
request
.
setPartnerId
(
refundRequest
.
getPartnerId
());
request
.
setVer
(
2
);
request
.
setExtendParams
(
refundRequest
.
getExtendParams
());
com
.
freemud
.
application
.
sdk
.
api
.
base
.
BaseResponse
<
OrderRefundResponse
>
checkParam
=
this
.
checkParam
(
refundRequest
.
getPartnerId
(),
refundRequest
.
getStoreId
(),
refundRequest
.
getRefundAmount
(),
wxAppStore
);
if
(!
Objects
.
equals
(
checkParam
.
getCode
(),
"100"
))
{
return
checkParam
;
}
else
{
// String receiveJsonStr = this.setPayValueFromSDKByManager(refundRequest.getPartnerId(), refundRequest.getStoreId(), refundRequest.getRefundAmount() + vipAmount, vipAmount, wxAppStore.getIndirectId(), false);
// if (!StringUtils.isEmpty(receiveJsonStr)) {
// request.setAccountDivided(receiveJsonStr);
// }
// step3 退款
BaseResponse
<
PayRefundData
>
refundNewResponse
=
null
;
try
{
refundNewResponse
=
paymentNewClient
.
payRefund
(
request
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
ErrorLog
.
errorConvertJson
(
this
.
getClass
(),
"paymentcenter/refund error"
,
e
);
}
if
(
refundNewResponse
==
null
){
if
(
refundNewResponse
==
null
)
{
return
null
;
}
logUtil
.
info
(
"paymentcenter/refund"
,
JSONObject
.
toJSONString
(
request
),
JSONObject
.
toJSONString
(
refundNewResponse
));
logUtil
.
info
(
"paymentcenter/refund"
,
JSONObject
.
toJSONString
(
request
),
JSONObject
.
toJSONString
(
refundNewResponse
));
if
(
Objects
.
equals
(
refundNewResponse
.
getCode
(),
"100"
))
{
PayRefundData
refundData
=
refundNewResponse
.
getData
();
if
(
null
!=
refundData
)
{
...
...
@@ -383,15 +421,9 @@ public class PaymentHandle {
return
ResponseUtils
.
success
(
refundResponse
);
}
}
if
(!
Arrays
.
asList
(
"8200201"
,
"8200202"
,
"8200203"
,
"8200204"
,
"8200205"
).
contains
(
refundNewResponse
.
getCode
()))
{
// this.emailAlertService.sendEmailAlert("支付退款失败", "请求json:" + JSONObject.toJSONString(request) + "返回msg:" + refundNewResponse.getMessage());
}
return
ResponseUtils
.
error
(
refundNewResponse
.
getCode
(),
refundNewResponse
.
getMessage
());
}
}
public
com
.
freemud
.
application
.
sdk
.
api
.
base
.
BaseResponse
<
OrderRefundResponse
>
checkParam
(
String
partnerId
,
String
storeId
,
Long
amount
,
AssortmentOpenPlatformIappWxappStore
wxAppStore
)
{
if
(
StringUtils
.
isBlank
(
partnerId
))
{
...
...
@@ -409,7 +441,7 @@ public class PaymentHandle {
public
Integer
getRefundStatus
(
Integer
resultCode
)
{
if
(
Objects
.
equals
(
resultCode
,
SUCCESS_RESPONSE_CODE_INT
))
{
return
PaymentRefundStatus
.
PAYMENT_REFUND_STATUS_1
.
getCode
();
}
else
if
(
Objects
.
equals
(
resultCode
,
SUCCESS_RESPONSE_101_CODE_INT
))
{
}
else
if
(
Objects
.
equals
(
resultCode
,
SUCCESS_RESPONSE_101_CODE_INT
))
{
return
PaymentRefundStatus
.
PAYMENT_REFUND_STATUS_1
.
getCode
();
}
else
{
return
Objects
.
equals
(
resultCode
,
REFUND_RESPONSE_CODE
)
?
PaymentRefundStatus
.
PAYMENT_REFUND_STATUS_4
.
getCode
()
:
PaymentRefundStatus
.
PAYMENT_REFUND_STATUS_2
.
getCode
();
...
...
order-management/src/main/java/cn/freemud/management/service/handle/SaasOrderHandle.java
View file @
b2aab53f
...
...
@@ -221,6 +221,7 @@ public class SaasOrderHandle {
if
(
PayRefundStatus
.
SUCCESS
.
equals
(
refundResponse
.
getPayRefundStatus
()))
{
baseOrderResponse
=
orderCenterSdkService
.
refundComplete
(
refundAgreeRequest
);
}
else
{
// fisherman 这里有缺陷 退款失败也是最终状态, 基础服务售后状态不能为 4 不然用户无法重新发起售后单
baseOrderResponse
=
orderCenterSdkService
.
refundReturn
(
refundAgreeRequest
);
}
if
(
baseOrderResponse
==
null
||
ObjectUtils
.
notEqual
(
ResponseResult
.
SUCCESS
.
getCode
(),
baseOrderResponse
.
getErrcode
().
toString
()))
{
...
...
order-management/src/main/java/cn/freemud/management/service/impl/SaasOrderMangerServiceImpl.java
View file @
b2aab53f
...
...
@@ -108,7 +108,7 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
QueryFlag
query
=
QueryFlag
.
builder
().
queryBusinessInfo
(
true
).
queryStoreInfo
(
true
).
build
();
ConsoleResponseDTO
<
BizDTO
>
storeMix
=
this
.
getStoreMix
(
query
,
orderBean
.
getCompanyId
(),
orderBean
.
getShopId
());
boolean
idAutoCreate
=
false
;
if
(
storeMix
!=
null
&&
ObjectUtils
.
equals
(
ResponseResult
.
SUCCESS
.
getCode
(),
storeMix
.
getStatusCode
()))
{
if
(
storeMix
!=
null
&&
ObjectUtils
.
equals
(
ResponseResult
.
SUCCESS
.
getCode
(),
storeMix
.
getStatusCode
()))
{
BizDTO
bizVO
=
storeMix
.
getBizVO
();
// fisherman 预约单不走自动|半自动派单逻辑 【【野萃山】手动派单增加半自动配置】 https://www.tapd.cn/43862731/prong/stories/view/1143862731001040800
boolean
reservedExpress
=
Objects
.
equals
(
orderBean
.
getNewOrderType
(),
OrderType
.
GENERAL_EXPRESS
.
getIndex
());
...
...
@@ -137,13 +137,13 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
// 创建配送单
deliveryHandle
.
createDelivery
(
orderBean
,
request
,
storeMix
,
idAutoCreate
);
// 推送pos、微信消息中心 重复接单不重复推消息(针对蜜雪做的修改)
if
(
baseResponse
!=
null
&&
baseResponse
.
getResult
()
==
null
)
{
if
(
baseResponse
!=
null
&&
baseResponse
.
getResult
()
==
null
)
{
orderBaseService
.
sendMessage
(
orderBean
,
OperateType
.
ORDER_CONFIRM
,
request
.
getReason
());
}
// 增加全局开关,当紧急方案打开时进行直接处理callBack消息
if
(
orderCenterProperties
.
isUrgentCallbackOpen
())
{
OrderCallBackRequestVo
requestVo
=
saasOrderHandle
.
convert2CallbackReq
(
orderBean
.
getOid
(),
3
,
null
,
null
);
ApiLog
.
infoMessage
(
"紧急方案 接单成功直接调用callback,orderCode:{},requestId:{}"
,
requestVo
.
getOrderCode
(),
requestVo
.
getRequestId
());
OrderCallBackRequestVo
requestVo
=
saasOrderHandle
.
convert2CallbackReq
(
orderBean
.
getOid
(),
3
,
null
,
null
);
ApiLog
.
infoMessage
(
"紧急方案 接单成功直接调用callback,orderCode:{},requestId:{}"
,
requestVo
.
getOrderCode
(),
requestVo
.
getRequestId
());
orderCallbackClient
.
callbackOrder
(
requestVo
);
}
return
ResponseUtil
.
success
(
new
OrderManagerResponse
(
storeMix
.
getBizVO
().
getBusinessInfo
().
getOrderPrintConfig
(),
orderBean
.
getGmtExpect
(),
...
...
@@ -208,14 +208,14 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
@Override
public
BaseResponse
<
OrderManagerResponse
>
orderReject
(
OrderManagerRequest
request
,
OrderBeanV1
orderBean
)
{
//支付退款
PayRefundResponse
refundResponse
;
PayRefundResponse
refundResponse
;
try
{
if
(
null
!=
orderBean
.
getOrderPayItem
()
&&
orderBean
.
getOrderPayItem
().
size
()>
0
)
{
if
(
null
!=
orderBean
.
getOrderPayItem
()
&&
orderBean
.
getOrderPayItem
().
size
()
>
0
)
{
refundResponse
=
paymentHandle
.
multiRefund
(
orderBean
);
}
else
{
}
else
{
refundResponse
=
paymentHandle
.
refund
(
request
,
orderBean
);
}
}
catch
(
OrderServiceException
orderEx
){
// 爱马哥兼容,不抛错
}
catch
(
OrderServiceException
orderEx
)
{
// 爱马哥兼容,不抛错
return
ResponseUtil
.
error
(
orderEx
.
getResult
());
}
//订单拒单
...
...
@@ -224,12 +224,11 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
orderBaseService
.
sendMessage
(
orderBean
,
OperateType
.
ORDER_REJECT
,
request
.
getReason
());
//todo 可以考虑基于订单回调异步实现
//冲正库存
stockHandle
.
revert
(
request
,
orderBean
);
stockHandle
.
revert
(
request
,
orderBean
);
return
ResponseUtil
.
success
();
}
/**
* 同意退款
*
...
...
@@ -240,32 +239,39 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
@Override
public
BaseResponse
<
OrderManagerResponse
>
orderAgreeRefund
(
OrderManagerRequest
request
,
OrderBeanV1
orderBean
)
{
//取消配送单
deliveryHandle
.
cancelDelivery
(
orderBean
,
request
);
deliveryHandle
.
cancelDelivery
(
orderBean
,
request
);
//支付退款
PayRefundResponse
refundResponse
;
try
{
if
(
null
!=
orderBean
.
getOrderPayItem
()
&&
orderBean
.
getOrderPayItem
().
size
()>
0
){
if
(
null
!=
orderBean
.
getOrderPayItem
()
&&
orderBean
.
getOrderPayItem
().
size
()
>
0
)
{
// payment/application/refund
refundResponse
=
paymentHandle
.
multiRefund
(
orderBean
);
}
else
{
}
else
{
OrderExtendedReq
ext
=
orderBean
.
getOrderExtended
();
if
(
StringUtils
.
isNotBlank
(
ext
.
getAgentPayerId
())
&&
!
Objects
.
equals
(
ext
.
getAgentPayerId
(),
orderBean
.
getUserId
()))
{
//代付人信息不为空 并且和订单创建人不一样,表示代付单
//代付人信息不为空 并且和订单创建人不一样,表示代付单
payment/application/agentRefund
refundResponse
=
paymentHandle
.
agentPayRefund
(
orderBean
);
}
else
{
//正常订单现金退款
//正常订单现金退款
paymentcenter/refund
refundResponse
=
paymentHandle
.
refund
(
request
,
orderBean
);
}
}
}
catch
(
OrderServiceException
orderEx
){
// 爱马哥兼容,不抛错
}
catch
(
OrderServiceException
orderEx
)
{
// 爱马哥兼容,不抛错
return
ResponseUtil
.
error
(
orderEx
.
getResult
());
}
// fisherman --> 退款中的状态 阻止后续流程 等待支付回调
if
(
refundResponse
.
getPayRefundStatus
().
getCode
().
compareTo
(
PayRefundStatus
.
RUNNING
.
getCode
())
==
0
)
{
return
ResponseUtil
.
error
(
ResponseResult
.
REFUND_FAIL_WAIT_CALLBACK
);
}
//订单同意退款
saasOrderHandle
.
refundAgree
(
request
,
refundResponse
,
orderBean
);
// 推送pos、微信消息中心
orderBaseService
.
sendMessage
(
orderBean
,
ORDER_AGREE_REFUND
,
request
.
getReason
());
//todo 可以考虑基于订单回调异步实现
//冲正库存
stockHandle
.
revert
(
request
,
orderBean
);
stockHandle
.
revert
(
request
,
orderBean
);
return
ResponseUtil
.
success
();
}
...
...
@@ -279,7 +285,7 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
@Override
public
BaseResponse
<
OrderManagerResponse
>
orderRejectRefund
(
OrderManagerRequest
request
,
OrderBeanV1
orderBean
)
{
//拒绝退款
saasOrderHandle
.
refundReject
(
request
,
orderBean
);
saasOrderHandle
.
refundReject
(
request
,
orderBean
);
// 推送pos、微信消息中心
orderBaseService
.
sendMessage
(
orderBean
,
OperateType
.
ORDER_REJECT_REFUND
,
request
.
getReason
());
return
ResponseUtil
.
success
();
...
...
@@ -289,21 +295,21 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
* 取消订单
*/
@Override
public
BaseResponse
<
OrderManagerResponse
>
orderCancel
(
OrderManagerRequest
request
,
OrderBeanV1
orderBean
){
public
BaseResponse
<
OrderManagerResponse
>
orderCancel
(
OrderManagerRequest
request
,
OrderBeanV1
orderBean
)
{
if
(
BizTypeEnum
.
ORDINARY
.
getBizType
().
compareTo
(
orderBean
.
getBizType
())
==
0
&&
MarketTypeEnum
.
TIKTOK_MARKET_ORDER
.
getIndex
().
compareTo
(
Byte
.
toUnsignedInt
(
orderBean
.
getMarketingType
()))
==
0
)
{
this
.
orderAgreeRefund
(
request
,
orderBean
);
return
ResponseUtil
.
success
();
}
List
<
Integer
>
newOrderStatusList
=
Arrays
.
asList
(
OrderStatusV1
.
RECEIPT
.
getV2Code
(),
OrderStatusV1
.
COMPLETE
.
getV2Code
(),
OrderStatusV1
.
COMPLETE_MAKE
.
getV2Code
());
List
<
String
>
sourceList
=
Arrays
.
asList
(
OrderSourceV1
.
SAAS
.
getCode
(),
OrderSourceV1
.
ALIPAY
.
getCode
(),
OrderSourceV1
.
APP
.
getCode
());
List
<
Integer
>
newOrderStatusList
=
Arrays
.
asList
(
OrderStatusV1
.
RECEIPT
.
getV2Code
(),
OrderStatusV1
.
COMPLETE
.
getV2Code
(),
OrderStatusV1
.
COMPLETE_MAKE
.
getV2Code
());
List
<
String
>
sourceList
=
Arrays
.
asList
(
OrderSourceV1
.
SAAS
.
getCode
(),
OrderSourceV1
.
ALIPAY
.
getCode
(),
OrderSourceV1
.
APP
.
getCode
());
if
(
sourceList
.
contains
(
orderBean
.
getSource
())
&&
newOrderStatusList
.
contains
(
orderBean
.
getStatusV2
()))
{
return
executeRefund
(
request
,
orderBean
,
OperateType
.
ORDER_REJECT
.
getOpType
());
return
executeRefund
(
request
,
orderBean
,
OperateType
.
ORDER_REJECT
.
getOpType
());
}
else
if
(
OrderSourceV1
.
MEAL
.
getCode
().
equals
(
orderBean
.
getSource
()))
{
if
(
OrderStatusV1
.
WAIT_PAY
.
getV2Code
().
equals
(
orderBean
.
getStatusV2
())
||
PayType
.
CASH_ON_DELIVERY
.
getCode
().
compareTo
(
orderBean
.
getPayType
())
==
0
)
{
return
executeCancel
(
request
,
orderBean
,
PayRefundStatus
.
SUCCESS
.
getCode
(),
AfterSalesType
.
SYSTEM_CANCEL
.
getIndex
(),
Integer
.
valueOf
(
orderBean
.
getOrderClient
()));
return
executeCancel
(
request
,
orderBean
,
PayRefundStatus
.
SUCCESS
.
getCode
(),
AfterSalesType
.
SYSTEM_CANCEL
.
getIndex
(),
Integer
.
valueOf
(
orderBean
.
getOrderClient
()));
}
else
{
return
executeRefund
(
request
,
orderBean
,
OperateType
.
ORDER_REJECT
.
getOpType
());
return
executeRefund
(
request
,
orderBean
,
OperateType
.
ORDER_REJECT
.
getOpType
());
}
}
else
if
(
OrderSourceV1
.
POS
.
getCode
().
equals
(
orderBean
.
getSource
()))
{
return
posCancel
(
orderBean
);
...
...
@@ -313,12 +319,13 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
/**
* 退款操作
*
* @param request
* @param orderBean
* @param operationType
* @return
*/
private
BaseResponse
<
OrderManagerResponse
>
executeRefund
(
OrderManagerRequest
request
,
OrderBeanV1
orderBean
,
String
operationType
)
{
private
BaseResponse
<
OrderManagerResponse
>
executeRefund
(
OrderManagerRequest
request
,
OrderBeanV1
orderBean
,
String
operationType
)
{
//订单接单参数校验
BaseResponse
verifyResponse
=
orderVerifyHandle
.
orderCancel
(
orderBean
,
OperateType
.
ORDER_AGREE_REFUND
.
getOpType
());
if
(
ObjectUtils
.
notEqual
(
verifyResponse
.
getCode
(),
ResponseResult
.
SUCCESS
.
getCode
()))
{
...
...
@@ -329,7 +336,7 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
if
(
operationType
.
equalsIgnoreCase
(
OperateType
.
ORDER_REJECT
.
getOpType
()))
{
baseResponse
=
this
.
orderReject
(
request
,
orderBean
);
}
if
(
null
==
baseResponse
||
!
ObjectUtils
.
equals
(
SUCCESS
,
Integer
.
valueOf
(
baseResponse
.
getCode
())))
{
if
(
null
==
baseResponse
||
!
ObjectUtils
.
equals
(
SUCCESS
,
Integer
.
valueOf
(
baseResponse
.
getCode
())))
{
if
(
PAY_RETURN_FILTER_CODES
.
contains
(
baseResponse
.
getCode
()))
{
return
ResponseUtil
.
error
(
ResponseResult
.
getResponseResult
(
baseResponse
.
getCode
()));
}
...
...
@@ -346,7 +353,7 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
* @param refundStatus 支付退款状态
* @return
*/
private
BaseResponse
<
OrderManagerResponse
>
executeCancel
(
OrderManagerRequest
request
,
OrderBeanV1
order
,
Integer
refundStatus
,
Integer
afterSalesType
,
Integer
orderClient
)
{
private
BaseResponse
<
OrderManagerResponse
>
executeCancel
(
OrderManagerRequest
request
,
OrderBeanV1
order
,
Integer
refundStatus
,
Integer
afterSalesType
,
Integer
orderClient
)
{
Integer
createEvent
;
if
(
PayRefundStatus
.
RUNNING
.
getCode
().
equals
(
refundStatus
))
{
createEvent
=
CreateEventEnum
.
FIVE
.
getType
();
...
...
@@ -363,9 +370,9 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
orderCancelReq
.
setCreateEvent
(
createEvent
);
orderCancelReq
.
setOrderClient
(
orderClient
==
null
?
OrderClientType
.
SAAS
.
getIndex
()
:
orderClient
);
orderCancelReq
.
setOperator
(
request
.
getOperator
());
OrderBaseResp
baseResponse
=
orderSdkService
.
cancelOrder
(
orderCancelReq
,
UUID
.
randomUUID
().
toString
());
if
(!
ObjectUtils
.
equals
(
SUCCESS
,
Integer
.
valueOf
(
baseResponse
.
getCode
())))
{
this
.
commonSendEmailAlert
(
order
,
baseResponse
,
"拒单在支付退款后的取消订单操作失败"
);
OrderBaseResp
baseResponse
=
orderSdkService
.
cancelOrder
(
orderCancelReq
,
UUID
.
randomUUID
().
toString
());
if
(!
ObjectUtils
.
equals
(
SUCCESS
,
Integer
.
valueOf
(
baseResponse
.
getCode
())))
{
this
.
commonSendEmailAlert
(
order
,
baseResponse
,
"拒单在支付退款后的取消订单操作失败"
);
return
ResponseUtil
.
error
(
ResponseResult
.
PARTNER_ORDER_CANCEL_ERROR
);
}
return
ResponseUtil
.
success
();
...
...
@@ -380,24 +387,24 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
orderCancelReq
.
setAfterSalesType
(
AfterSalesType
.
PARTNER_CANCEL
.
getIndex
());
orderCancelReq
.
setCreateEvent
(
CreateEventEnum
.
FOUR
.
getType
());
orderCancelReq
.
setOrderClient
(
OrderClientType
.
POS
.
getIndex
());
OrderBaseResp
baseResponse
=
orderSdkService
.
cancelOrder
(
orderCancelReq
,
UUID
.
randomUUID
().
toString
());
if
(!
Objects
.
equals
(
SUCCESS
,
Integer
.
valueOf
(
baseResponse
.
getCode
())))
{
this
.
commonSendEmailAlert
(
order
,
baseResponse
,
"posCancel 取消订单失败"
);
OrderBaseResp
baseResponse
=
orderSdkService
.
cancelOrder
(
orderCancelReq
,
UUID
.
randomUUID
().
toString
());
if
(!
Objects
.
equals
(
SUCCESS
,
Integer
.
valueOf
(
baseResponse
.
getCode
())))
{
this
.
commonSendEmailAlert
(
order
,
baseResponse
,
"posCancel 取消订单失败"
);
return
ResponseUtil
.
error
(
ResponseResult
.
PARTNER_ORDER_CANCEL_ERROR
);
}
// 储值卡退款
OrderExtInfoDto
orderExtInfoDto
=
JSONObject
.
parseObject
(
order
.
getExtInfo
(),
OrderExtInfoDto
.
class
)
==
null
?
new
OrderExtInfoDto
()
:
JSONObject
.
parseObject
(
order
.
getExtInfo
(),
OrderExtInfoDto
.
class
);
//支付退款
if
(
orderExtInfoDto
!=
null
&&
orderExtInfoDto
.
getSvcAmount
()!=
null
&&
StringUtils
.
isNotEmpty
(
orderExtInfoDto
.
getSvcCardCode
())
&&
order
.
getPayStatus
()
>
1
)
{
if
(
orderExtInfoDto
!=
null
&&
orderExtInfoDto
.
getSvcAmount
()
!=
null
&&
StringUtils
.
isNotEmpty
(
orderExtInfoDto
.
getSvcCardCode
())
&&
order
.
getPayStatus
()
>
1
)
{
PayRefundResponse
refundResponse
=
paymentHandle
.
posOrderPayRefund
(
order
,
orderExtInfoDto
);
if
(!
ObjectUtils
.
equals
(
PayRefundStatus
.
SUCCESS
,
refundResponse
.
getPayRefundStatus
()))
{
if
(!
ObjectUtils
.
equals
(
PayRefundStatus
.
SUCCESS
,
refundResponse
.
getPayRefundStatus
()))
{
return
ResponseUtil
.
error
(
ResponseResult
.
PARTNER_ORDER_CANCEL_ERROR
);
}
}
return
ResponseUtil
.
success
();
}
private
void
commonSendEmailAlert
(
OrderBeanV1
order
,
OrderBaseResp
baseResponse
,
String
desc
)
{
private
void
commonSendEmailAlert
(
OrderBeanV1
order
,
OrderBaseResp
baseResponse
,
String
desc
)
{
emailAlertService
.
sendEmailAlert
(
desc
,
"请求json:"
+
JSONObject
.
toJSONString
(
order
)
+
"返回msg:"
+
baseResponse
.
getMessage
());
}
...
...
@@ -412,8 +419,8 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
@Override
public
BaseResponse
orderCancelDelivery
(
OrderManagerRequest
request
,
OrderBeanV1
orderBean
)
{
BaseResponse
response
=
deliveryHandle
.
cancelDelivery
(
orderBean
,
request
);
if
(!
Objects
.
equals
(
response
.
getCode
(),
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
)){
BaseResponse
response
=
deliveryHandle
.
cancelDelivery
(
orderBean
,
request
);
if
(!
Objects
.
equals
(
response
.
getCode
(),
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
))
{
return
response
;
}
OrderExpressReq
expressReq
=
new
OrderExpressReq
();
...
...
@@ -421,15 +428,14 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
expressReq
.
setPartnerId
(
orderBean
.
getCompanyId
());
expressReq
.
setOrderSubState
(
DeliveryStatus
.
DELIVERYCANCEL
.
getCode
());
OrderBaseResp
orderBaseResp
=
orderSdkService
.
updateDeliveryInfo
(
expressReq
,
LogThreadLocal
.
getTrackingNo
());
if
(!
Objects
.
equals
(
orderBaseResp
.
getCode
(),
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
)){
this
.
commonSendEmailAlert
(
orderBean
,
orderBaseResp
,
"取消配送,修改订单配送状态失败"
);
if
(!
Objects
.
equals
(
orderBaseResp
.
getCode
(),
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
))
{
this
.
commonSendEmailAlert
(
orderBean
,
orderBaseResp
,
"取消配送,修改订单配送状态失败"
);
return
ResponseUtil
.
error
(
ResponseResult
.
ORDER_DELIVERY_EDIT_FAILED
);
}
return
ResponseUtil
.
success
();
}
/**
*
* @param query
* @param partnerId
* @param storeId
...
...
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