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
802d8a6d
Commit
802d8a6d
authored
Mar 05, 2024
by
ping.wu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
门店发起部分退款
parent
fb814bae
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
132 additions
and
5 deletions
+132
-5
order-management/src/main/java/cn/freemud/management/controller/OrderManagerController.java
+2
-0
order-management/src/main/java/cn/freemud/management/entities/dto/request/order/OrderManagerRequest.java
+5
-0
order-management/src/main/java/cn/freemud/management/entities/dto/response/order/OrderManagerResponse.java
+5
-0
order-management/src/main/java/cn/freemud/management/enums/OperateType.java
+1
-0
order-management/src/main/java/cn/freemud/management/enums/ResponseResult.java
+2
-0
order-management/src/main/java/cn/freemud/management/service/OrderManagerService.java
+7
-0
order-management/src/main/java/cn/freemud/management/service/adapter/OrderManagerAdapter.java
+23
-5
order-management/src/main/java/cn/freemud/management/service/handle/OrderVerifyHandle.java
+27
-0
order-management/src/main/java/cn/freemud/management/service/handle/PaymentHandle.java
+2
-0
order-management/src/main/java/cn/freemud/management/service/impl/SaasOrderMangerServiceImpl.java
+58
-0
No files found.
order-management/src/main/java/cn/freemud/management/controller/OrderManagerController.java
View file @
802d8a6d
...
@@ -64,6 +64,8 @@ public class OrderManagerController {
...
@@ -64,6 +64,8 @@ public class OrderManagerController {
return
orderManagerAdapter
.
orderRejectRefund
(
request
);
return
orderManagerAdapter
.
orderRejectRefund
(
request
);
case
ORDER_CANCEL:
case
ORDER_CANCEL:
return
orderManagerAdapter
.
orderCancel
(
request
);
return
orderManagerAdapter
.
orderCancel
(
request
);
case
PART_REFUND:
return
orderManagerAdapter
.
partRefund
(
request
);
case
ORDER_CREATE_DELIVERY:
case
ORDER_CREATE_DELIVERY:
return
orderManagerAdapter
.
orderCreateDelivery
(
request
);
return
orderManagerAdapter
.
orderCreateDelivery
(
request
);
case
ORDER_CANCEL_DELIVERY:
case
ORDER_CANCEL_DELIVERY:
...
...
order-management/src/main/java/cn/freemud/management/entities/dto/request/order/OrderManagerRequest.java
View file @
802d8a6d
...
@@ -88,4 +88,9 @@ public class OrderManagerRequest {
...
@@ -88,4 +88,9 @@ public class OrderManagerRequest {
* 品牌审核售后单 不传默认无需品牌审核
* 品牌审核售后单 不传默认无需品牌审核
*/
*/
private
Boolean
brandVerifyAfterSales
=
false
;
private
Boolean
brandVerifyAfterSales
=
false
;
/**
* 部分退金额,单位分
*/
private
Integer
refundAmount
;
}
}
order-management/src/main/java/cn/freemud/management/entities/dto/response/order/OrderManagerResponse.java
View file @
802d8a6d
...
@@ -29,6 +29,11 @@ public class OrderManagerResponse {
...
@@ -29,6 +29,11 @@ public class OrderManagerResponse {
*/
*/
private
Integer
refundStatus
;
private
Integer
refundStatus
;
/**
* 支付退款状态
*/
private
Integer
payRefundStatus
;
public
OrderManagerResponse
(){
public
OrderManagerResponse
(){
}
}
...
...
order-management/src/main/java/cn/freemud/management/enums/OperateType.java
View file @
802d8a6d
...
@@ -12,6 +12,7 @@ public enum OperateType {
...
@@ -12,6 +12,7 @@ public enum OperateType {
ORDER_AGREE_REFUND
(
"orderAgreeRefund"
,
"同意退款"
),
ORDER_AGREE_REFUND
(
"orderAgreeRefund"
,
"同意退款"
),
ORDER_REJECT_REFUND
(
"orderRejectRefund"
,
"拒绝退款"
),
ORDER_REJECT_REFUND
(
"orderRejectRefund"
,
"拒绝退款"
),
ORDER_CANCEL
(
"orderCancel"
,
"订单取消"
),
ORDER_CANCEL
(
"orderCancel"
,
"订单取消"
),
PART_REFUND
(
"partRefund"
,
"部分退款"
),
ORDER_CREATE_DELIVERY
(
"orderCreateDelivery"
,
"创建配送"
),
ORDER_CREATE_DELIVERY
(
"orderCreateDelivery"
,
"创建配送"
),
ORDER_CANCEL_DELIVERY
(
"orderCancelDelivery"
,
"取消配送"
),
ORDER_CANCEL_DELIVERY
(
"orderCancelDelivery"
,
"取消配送"
),
/**
/**
...
...
order-management/src/main/java/cn/freemud/management/enums/ResponseResult.java
View file @
802d8a6d
...
@@ -16,6 +16,7 @@ public enum ResponseResult {
...
@@ -16,6 +16,7 @@ public enum ResponseResult {
NOT_LOGIN
(
"40001"
,
"用户未登录"
),
NOT_LOGIN
(
"40001"
,
"用户未登录"
),
PARAMETER_MISSING
(
"40002"
,
"缺少必要参数"
),
PARAMETER_MISSING
(
"40002"
,
"缺少必要参数"
),
OPERATE_TOO_OFTEN
(
"40003"
,
"忙不过来了,请稍后再试"
),
OPERATE_TOO_OFTEN
(
"40003"
,
"忙不过来了,请稍后再试"
),
OPERATE_NOT_SUPPORT
(
"40004"
,
"操作不支持"
),
/**
/**
* 用户信息状态码
* 用户信息状态码
...
@@ -175,6 +176,7 @@ public enum ResponseResult {
...
@@ -175,6 +176,7 @@ public enum ResponseResult {
ORDER_DELIVERY_EDIT_FAILED
(
"45090"
,
"修改配送状态失败"
),
ORDER_DELIVERY_EDIT_FAILED
(
"45090"
,
"修改配送状态失败"
),
PARTNER_CAN_NOT_CANCEL_ORDER
(
"45091"
,
"订单已部分退款,不能取消"
),
PARTNER_CAN_NOT_CANCEL_ORDER
(
"45091"
,
"订单已部分退款,不能取消"
),
DONE_FAIL_ONE_MINUTE
(
"45092"
,
"平台规定,接单一分钟后才能出餐"
),
DONE_FAIL_ONE_MINUTE
(
"45092"
,
"平台规定,接单一分钟后才能出餐"
),
PARTNER_CAN_NOT_OPERATE
(
"45093"
,
"订单已部分退款,请勿重复操作"
),
/**
/**
* 支付
* 支付
...
...
order-management/src/main/java/cn/freemud/management/service/OrderManagerService.java
View file @
802d8a6d
...
@@ -4,6 +4,7 @@ import cn.freemud.base.entity.BaseResponse;
...
@@ -4,6 +4,7 @@ import cn.freemud.base.entity.BaseResponse;
import
cn.freemud.management.entities.dto.request.order.OrderManagerRequest
;
import
cn.freemud.management.entities.dto.request.order.OrderManagerRequest
;
import
cn.freemud.management.entities.dto.request.order.RefundSuccessCallbackVo
;
import
cn.freemud.management.entities.dto.request.order.RefundSuccessCallbackVo
;
import
cn.freemud.management.entities.dto.response.order.OrderManagerResponse
;
import
cn.freemud.management.entities.dto.response.order.OrderManagerResponse
;
import
cn.freemud.management.enums.ResponseResult
;
import
cn.freemud.management.util.ResponseUtil
;
import
cn.freemud.management.util.ResponseUtil
;
import
com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1
;
import
com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1
;
...
@@ -89,6 +90,12 @@ public interface OrderManagerService {
...
@@ -89,6 +90,12 @@ public interface OrderManagerService {
return
ResponseUtil
.
success
();
return
ResponseUtil
.
success
();
}
}
/**
* 门店操作部分退
*/
default
BaseResponse
<
OrderManagerResponse
>
partRefund
(
OrderManagerRequest
request
,
OrderBeanV1
orderBean
){
return
ResponseUtil
.
error
(
ResponseResult
.
OPERATE_NOT_SUPPORT
);
}
/**
/**
* 创建配送单
* 创建配送单
...
...
order-management/src/main/java/cn/freemud/management/service/adapter/OrderManagerAdapter.java
View file @
802d8a6d
...
@@ -263,6 +263,23 @@ public class OrderManagerAdapter {
...
@@ -263,6 +263,23 @@ public class OrderManagerAdapter {
}
}
/**
/**
* 部分退款,发起售后单,退款,同意售后
*/
public
BaseResponse
partRefund
(
OrderManagerRequest
request
)
{
//查询订单
OrderBeanV1
orderBean
=
orderBaseService
.
getByOrderCode
(
request
.
getOrderId
(),
request
.
getPartnerId
());
if
(
null
==
orderBean
)
{
return
ResponseUtil
.
error
(
ResponseResult
.
ORDER_NOT_EXIST
);
}
BaseResponse
verifyResponse
=
orderVerifyHandle
.
partRefund
(
orderBean
);
if
(
ObjectUtils
.
notEqual
(
verifyResponse
.
getCode
(),
ResponseResult
.
SUCCESS
.
getCode
()))
{
return
handleResponse
(
request
,
orderBean
,
verifyResponse
);
}
BaseResponse
<
OrderManagerResponse
>
orderManagerResponse
=
orderBeanFactory
.
getOrderManagerService
(
orderBean
).
partRefund
(
request
,
orderBean
);
return
handleResponse
(
request
,
orderBean
,
orderManagerResponse
);
}
/**
* 拒绝退款
* 拒绝退款
*
*
* @param request
* @param request
...
@@ -284,13 +301,13 @@ public class OrderManagerAdapter {
...
@@ -284,13 +301,13 @@ public class OrderManagerAdapter {
// }
// }
private
BaseResponse
<
OrderManagerResponse
>
handleResponse
(
OrderManagerRequest
request
,
OrderBeanV1
orderBean
,
BaseResponse
res
ult
)
{
private
BaseResponse
<
OrderManagerResponse
>
handleResponse
(
OrderManagerRequest
request
,
OrderBeanV1
orderBean
,
BaseResponse
res
ponse
)
{
if
(
orderBean
==
null
)
{
if
(
orderBean
==
null
)
{
return
res
ult
;
return
res
ponse
;
}
}
RefundStatusV1
refundStatus
=
CollectionUtils
.
isNotEmpty
(
orderBean
.
getRefundList
())
?
RefundStatusV1
.
getRefundStatusByCodeV1
(
orderBean
.
getRefundList
().
get
(
0
).
getStatus
())
:
null
;
RefundStatusV1
refundStatus
=
CollectionUtils
.
isNotEmpty
(
orderBean
.
getRefundList
())
?
RefundStatusV1
.
getRefundStatusByCodeV1
(
orderBean
.
getRefundList
().
get
(
0
).
getStatus
())
:
null
;
OrderStatusV1
orderStatus
=
OrderStatusV1
.
getByCode
(
orderBean
.
getStatus
());
OrderStatusV1
orderStatus
=
OrderStatusV1
.
getByCode
(
orderBean
.
getStatus
());
if
(
ObjectUtils
.
equals
(
ResponseResult
.
SUCCESS
.
getCode
(),
res
ult
.
getCode
()))
{
if
(
ObjectUtils
.
equals
(
ResponseResult
.
SUCCESS
.
getCode
(),
res
ponse
.
getCode
()))
{
OperateType
byOpType
=
OperateType
.
getByOpType
(
request
.
getOperateType
());
OperateType
byOpType
=
OperateType
.
getByOpType
(
request
.
getOperateType
());
if
(
byOpType
!=
null
)
{
if
(
byOpType
!=
null
)
{
switch
(
byOpType
)
{
switch
(
byOpType
)
{
...
@@ -319,8 +336,9 @@ public class OrderManagerAdapter {
...
@@ -319,8 +336,9 @@ public class OrderManagerAdapter {
}
}
return
ResponseUtil
.
success
(
new
OrderManagerResponse
(
orderStatus
,
refundStatus
));
return
ResponseUtil
.
success
(
new
OrderManagerResponse
(
orderStatus
,
refundStatus
));
}
}
result
.
setResult
(
new
OrderManagerResponse
(
orderStatus
,
refundStatus
));
if
(
response
.
getResult
()
!=
null
)
return
response
;
return
result
;
response
.
setResult
(
new
OrderManagerResponse
(
orderStatus
,
refundStatus
));
return
response
;
}
}
/**
/**
...
...
order-management/src/main/java/cn/freemud/management/service/handle/OrderVerifyHandle.java
View file @
802d8a6d
...
@@ -36,6 +36,7 @@ import java.util.Arrays;
...
@@ -36,6 +36,7 @@ import java.util.Arrays;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.Objects
;
import
java.util.concurrent.TimeUnit
;
import
java.util.stream.Stream
;
import
java.util.stream.Stream
;
...
@@ -66,6 +67,8 @@ public class OrderVerifyHandle {
...
@@ -66,6 +67,8 @@ public class OrderVerifyHandle {
private
String
macCafePartnerId
;
private
String
macCafePartnerId
;
private
static
final
String
THIRD
=
"third"
;
private
static
final
String
THIRD
=
"third"
;
public
static
final
String
PAYMENT_REFUND_KEY
=
"kgd:order:payment:refund:{0}"
;
/**
/**
* 接单校验
* 接单校验
*
*
...
@@ -688,4 +691,28 @@ public class OrderVerifyHandle {
...
@@ -688,4 +691,28 @@ public class OrderVerifyHandle {
return
ResponseUtil
.
success
();
return
ResponseUtil
.
success
();
}
}
/**
* 校验是否部分退
*/
public
BaseResponse
partRefund
(
OrderBeanV1
orderBean
){
//已取消的订单不能操作
if
(
ObjectUtils
.
equals
(
OrderStatusV1
.
CANCEL
.
getV2Code
(),
orderBean
.
getStatusV2
()))
{
return
ResponseUtil
.
error
(
ResponseResult
.
ORDER_HAS_CANCELED
);
}
if
(
isWaimai
(
orderBean
)){
return
ResponseUtil
.
error
(
ResponseResult
.
PARTNER_CAN_NOT_OPERATE
.
getCode
(),
"三方平台外卖单暂无法操作"
);
}
//判断订单是否有申请退款且为部分退款
if
(
orderBean
.
getAfterSalesOrderResp
()
!=
null
&&
orderBean
.
getAfterSalesOrderResp
().
getIsPartRefund
())
{
return
ResponseUtil
.
error
(
ResponseResult
.
PARTNER_CAN_NOT_OPERATE
);
}
String
redisKey
=
MessageFormat
.
format
(
PAYMENT_REFUND_KEY
,
orderBean
.
getOid
());
Object
value
=
redisCache
.
getValue
(
redisKey
);
if
(
value
!=
null
){
return
ResponseUtil
.
error
(
ResponseResult
.
OPERATE_NOT_SUPPORT
.
getCode
(),
"订单正在退款,请勿重复操作"
);
}
redisCache
.
save
(
redisKey
,
orderBean
.
getOid
(),
30L
,
TimeUnit
.
SECONDS
);
return
ResponseUtil
.
success
();
}
}
}
order-management/src/main/java/cn/freemud/management/service/handle/PaymentHandle.java
View file @
802d8a6d
...
@@ -97,6 +97,8 @@ public class PaymentHandle {
...
@@ -97,6 +97,8 @@ public class PaymentHandle {
if
(
afterSalesOrder
!=
null
)
{
if
(
afterSalesOrder
!=
null
)
{
refundAmount
=
new
BigDecimal
(
afterSalesOrder
.
getActualAmount
());
refundAmount
=
new
BigDecimal
(
afterSalesOrder
.
getActualAmount
());
}
}
//门店发起部分退款
if
(
request
.
getRefundAmount
()
!=
null
)
refundAmount
=
new
BigDecimal
(
request
.
getRefundAmount
());
//订单支付明细表新saas都会存数据,ka,pass商户需要兼容
//订单支付明细表新saas都会存数据,ka,pass商户需要兼容
PayRefundResponse
multiRefundResponse
=
multiRefundService
.
multiRefund
(
orderBean
.
getCompanyId
(),
orderBean
.
getShopId
(),
PayRefundResponse
multiRefundResponse
=
multiRefundService
.
multiRefund
(
orderBean
.
getCompanyId
(),
orderBean
.
getShopId
(),
orderBean
.
getOid
(),
refundAmount
,
orderBean
.
getOrderPayItem
(),
Integer
.
parseInt
(
orderBean
.
getOrderClient
()));
orderBean
.
getOid
(),
refundAmount
,
orderBean
.
getOrderPayItem
(),
Integer
.
parseInt
(
orderBean
.
getOrderClient
()));
...
...
order-management/src/main/java/cn/freemud/management/service/impl/SaasOrderMangerServiceImpl.java
View file @
802d8a6d
...
@@ -18,6 +18,7 @@ import cn.freemud.management.thirdparty.ConsoleApiClient;
...
@@ -18,6 +18,7 @@ import cn.freemud.management.thirdparty.ConsoleApiClient;
import
cn.freemud.management.thirdparty.OrderCallbackClient
;
import
cn.freemud.management.thirdparty.OrderCallbackClient
;
import
cn.freemud.management.util.ResponseUtil
;
import
cn.freemud.management.util.ResponseUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.freemud.application.sdk.api.constant.ResponseConstant
;
import
com.freemud.application.sdk.api.log.ApiLog
;
import
com.freemud.application.sdk.api.log.ApiLog
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.ordercenter.config.OrderCenterProperties
;
import
com.freemud.application.sdk.api.ordercenter.config.OrderCenterProperties
;
...
@@ -39,9 +40,11 @@ import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus;
...
@@ -39,9 +40,11 @@ import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang.ObjectUtils
;
import
org.apache.commons.lang.ObjectUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.util.*
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
import
java.util.stream.Stream
;
import
java.util.stream.Stream
;
...
@@ -349,6 +352,61 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
...
@@ -349,6 +352,61 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
return
ResponseUtil
.
error
(
"501"
,
"暂不支持"
);
return
ResponseUtil
.
error
(
"501"
,
"暂不支持"
);
}
}
@Override
public
BaseResponse
<
OrderManagerResponse
>
partRefund
(
OrderManagerRequest
request
,
OrderBeanV1
orderBean
)
{
//发起售后单,退款,同意售后
OrderCancelReq
orderCancelReq
=
new
OrderCancelReq
();
orderCancelReq
.
setPartnerId
(
orderBean
.
getCompanyId
());
orderCancelReq
.
setOrderCode
(
orderBean
.
getOid
());
orderCancelReq
.
setCancelReason
(
request
.
getReason
());
orderCancelReq
.
setAfterSalesType
(
3
);
orderCancelReq
.
setCreateEvent
(
4
);
orderCancelReq
.
setOrderClient
(
Integer
.
parseInt
(
orderBean
.
getOrderClient
()));
orderCancelReq
.
setOperator
(
request
.
getOperator
());
orderCancelReq
.
setOperationClient
(
request
.
getOperationClient
());
orderCancelReq
.
setRefundState
(
AfterSalesRefunStateEnum
.
STATE_1
.
getIndex
());
orderCancelReq
.
setIsPartRefund
(
true
);
orderCancelReq
.
setReqAmount
(
new
BigDecimal
(
request
.
getRefundAmount
()));
// 支付退款 包括线上小程序付款的订单,订单宝其他支付方式收款(汇来米,收钱吧,现金,其他)
PayRefundResponse
refundResponse
=
this
.
payRefundCommon
(
request
,
orderBean
);
// 退款异常
if
(
refundResponse
.
getPayRefundStatus
().
getCode
().
compareTo
(
PayRefundStatus
.
COMPATIBILITY_STATUS
.
getCode
())
==
0
)
{
return
ResponseUtil
.
error
(
refundResponse
.
getResult
());
}
// 退款失败终止下面的退款流程
if
(
refundResponse
.
getPayRefundStatus
().
getCode
().
compareTo
(
PayRefundStatus
.
FAIL
.
getCode
())
==
0
)
{
return
ResponseUtil
.
error
(
ResponseResult
.
REFUND_FAIL
.
getCode
(),
refundResponse
.
getMessage
());
}
List
<
OrderCancelReq
.
PayRefundItem
>
refundItemList
=
new
ArrayList
<>();
if
(!
CollectionUtils
.
isEmpty
(
refundResponse
.
getPayRefundItemList
()))
{
refundResponse
.
getPayRefundItemList
().
forEach
(
item
->
{
OrderCancelReq
.
PayRefundItem
refundItem
=
new
OrderCancelReq
.
PayRefundItem
();
BeanUtils
.
copyProperties
(
item
,
refundItem
);
refundItemList
.
add
(
refundItem
);
});
}
OrderManagerResponse
response
=
new
OrderManagerResponse
();
Integer
state
=
refundResponse
.
getPayRefundStatus
().
getCode
();
if
(
Objects
.
equals
(
PayRefundStatus
.
SUCCESS
.
getCode
(),
state
))
{
//退款成功
orderCancelReq
.
setCreateEvent
(
4
);
// 设置退款信息
orderCancelReq
.
setPayRefundItemList
(
refundItemList
);
}
else
if
(
Objects
.
equals
(
PayRefundStatus
.
RUNNING
.
getCode
(),
state
))
{
orderCancelReq
.
setCreateEvent
(
null
);
orderCancelReq
.
setRefundState
(
AfterSalesRefunStateEnum
.
STATE_2
.
getIndex
());
}
response
.
setPayRefundStatus
(
state
);
//同意售后
OrderBaseResp
baseResponse
=
orderSdkService
.
cancelOrder
(
orderCancelReq
,
LogThreadLocal
.
getTrackingNo
());
if
(
baseResponse
==
null
||
!
ObjectUtils
.
equals
(
ResponseConstant
.
SUCCESS_RESPONSE_CODE_STR
,
baseResponse
.
getCode
()))
{
return
ResponseUtil
.
error
(
ResponseResult
.
PARTNER_ORDER_CANCEL_ERROR
);
}
return
ResponseUtil
.
success
(
response
);
}
/**
/**
* 退款操作
* 退款操作
*
*
...
...
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