Commit 71b38b4e by ping.wu

支付退款失败才记录失败原因.售后单审核中和退货中都可以同意退款

parent b7dbf687
......@@ -139,6 +139,7 @@ public class OrderSdkAdapter {
// 退款状态为退款中:event为5,默认做【创建】+【同意并退货完成】,售后单状态【已退货】
//退款状态为退款完成:event为4,默认做【创建】+【同意并退款完成】,售后单状态为【完成】
var1.setCreateEvent(PayRefundStatus.SUCCESS.equals(refundStatus) ? AfterSalesCreateEvent.REFUND_COMPLETE.getCreateEvent() : AfterSalesCreateEvent.RETURN_COMPLETE.getCreateEvent());
var1.setRefundState(PayRefundStatus.SUCCESS.equals(refundStatus) ? 4 : 2);
var1.setOperator(operator);
var1.setReason(reason);
return var1;
......
......@@ -79,4 +79,14 @@ public class BaseQueryOrderRequest extends BaseConfig {
* 半自动派单时间 (分钟)
*/
private Integer dispatchTimeout;
/**
* 操作来源客户端 1:POS插件 2:小助手 3:开放平台 4:自动任务 5:用户端 6:系统 7:万象 8:太一
*/
private Integer operationClient;
/**
* 售后退款状态 0:未定义(存量数据) 1:未退款 2:退款中 3:退款失败 4:已退款
*/
private Integer refundState;
}
......@@ -62,6 +62,12 @@ public class CancelOrderRequest extends BaseConfig {
*
*/
private Integer createEvent;
/**
* 售后退款状态 0:未定义(存量数据) 1:未退款 2:退款中 3:退款失败 4:已退款
*/
private Integer refundState;
private Integer orderClient= OrderClientType.SAAS.getIndex();
//操作人
......
......@@ -82,7 +82,7 @@ public class OrderManagerRequest {
/**
* 售后渠道 1:POS插件 2:小助手 3:开放平台 4:自动任务 5:用户端 6:系统 7:万象 8:太一
*/
private Integer afterSalesApplyClient = 0;
private Integer operationClient = 0;
/**
* 品牌审核售后单 不传默认无需品牌审核
......
......@@ -340,15 +340,28 @@ public class OrderVerifyHandle {
return ResponseUtil.error(ResponseResult.ORDER_HAS_CANCELED);
}
//判断订单是否有申请退款
if (orderBean.getHasRefund() == null
|| !orderBean.getHasRefund()
|| orderBean.getRefundList().get(orderBean.getRefundList().size() - 1).getStatus() != 1) {
if (orderBean.getAfterSalesOrderResp() == null) {
return ResponseUtil.error(ResponseResult.ORDER_REFUND_NOT_APPLY);
}
//审核中或已退货状态可同意退款
List<Integer> canAgreeRefundStatus = Arrays.asList(1,4);
if (!canAgreeRefundStatus.contains(orderBean.getAfterSalesOrderResp().getAfterSalesStatus())) {
return ResponseUtil.error(ResponseResult.ORDER_REFUND_NOT_APPLY);
}
if("pos".equals(request.getOperator())){
request.setOperationClient(1);
}else if("小助手".equals(request.getOperator())){
request.setOperationClient(2);
}else if("开发平台".equals(request.getOperator())){
request.setOperationClient(3);
}else if("自动任务".equals(request.getOperator())){
request.setOperationClient(4);
}
//门店发起退款,需要品牌审核,则小助手不能发同意退款
if(Objects.equals(AfterSalesType.STORE_CANCEL.getIndex(),orderBean.getAfterSalesOrderResp().getAfterSalesType())){
//售后渠道 1:POS插件 2:小助手 3:开放平台 4:自动任务 5:用户端 6:系统 7:万象 8:太一
if(Objects.equals(request.getAfterSalesApplyClient() , 2) && request.getBrandVerifyAfterSales()){
if(Objects.equals(request.getOperationClient() , 2) && request.getBrandVerifyAfterSales()){
return ResponseUtil.error(ResponseResult.CAN_NOT_REFUND);
}
return ResponseUtil.success();
......
......@@ -217,12 +217,16 @@ public class SaasOrderHandle {
*/
public BaseResponse refundAgree(OrderManagerRequest request, PayRefundResponse refundResponse, OrderBeanV1 orderBean) {
BaseQueryOrderRequest refundAgreeRequest = orderSdkAdapter.getRefundAgreeRequest(refundResponse.getRefundId(), request.getReason(), request.getOperator(), orderBean);
refundAgreeRequest.setRefundState(PayRefundStatus.SUCCESS.getCode().equals(refundResponse.getPayRefundStatus().getCode()) ? 4 : 2);
refundAgreeRequest.setOperationClient(request.getOperationClient());
BaseOrderResponse baseOrderResponse = null;
if (PayRefundStatus.SUCCESS.equals(refundResponse.getPayRefundStatus())) {
baseOrderResponse = orderCenterSdkService.refundComplete(refundAgreeRequest);
} else {
// fisherman 这里有缺陷 退款失败也是最终状态, 基础服务售后状态不能为 4 不然用户无法重新发起售后单
} else if(PayRefundStatus.RUNNING.equals(refundResponse.getPayRefundStatus()) && orderBean.getAfterSalesOrderResp().getAfterSalesStatus() != 4){
//退款中, 基础服务售后状态不能为4,等待商家再次发起同意退款
baseOrderResponse = orderCenterSdkService.refundReturn(refundAgreeRequest);
}else {
return ResponseUtil.success();
}
if (baseOrderResponse == null || ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(), baseOrderResponse.getErrcode().toString())) {
return ResponseUtil.error(ResponseResult.AGREE_REFUND_ORDER_FAIL);
......@@ -238,49 +242,49 @@ public class SaasOrderHandle {
* @param orderBean
* @return
*/
public BaseResponse mcCafeRefundAgree(OrderManagerRequest request, PayRefundResponse refundResponse, OrderBeanV1 orderBean) {
BaseQueryOrderRequest refundAgreeRequest = orderSdkAdapter.getRefundAgreeRequest(refundResponse.getRefundId(), request.getReason(), request.getOperator(), orderBean);
BaseOrderResponse baseOrderResponse = null;
for(int i=0;i<orderBean.getRefundList().size();i++) {
if (RefundStatusV1.APPLY_REFUND.getCodeV1().equals(orderBean.getRefundList().get(i).getStatus())) {
refundAgreeRequest.setAfterSalesCode(orderBean.getRefundList().get(i).getRid());
if (PayRefundStatus.SUCCESS.equals(refundResponse.getPayRefundStatus())) {
baseOrderResponse = orderCenterSdkService.refundComplete(refundAgreeRequest);
} else {
baseOrderResponse = orderCenterSdkService.refundReturn(refundAgreeRequest);
}
break;
} else if (RefundStatusV1.COMPLETE_REFUND.getCodeV1().equals(orderBean.getRefundList().get(i).getStatus())) {
baseOrderResponse = new BaseOrderResponse();
baseOrderResponse.setErrcode(Integer.valueOf(ResponseResult.AGREE_REFUND_ORDER_FAIL.getCode()));
baseOrderResponse.setErrmsg("订单已经退款完成,不能重复申请");
break;
}
}
if(null == baseOrderResponse) {
OrderRefundRequest orderRefundRequest = new OrderRefundRequest();
orderRefundRequest.setPartnerId(refundAgreeRequest.getPartnerId());
orderRefundRequest.setStoreId(refundAgreeRequest.getShopId());
orderRefundRequest.setOrderId(refundAgreeRequest.getOrderId());
orderRefundRequest.setOrderClient(OrderClientType.SAAS.getIndex());
orderRefundRequest.setAfterSalesType(AfterSalesType.PARTNER_CANCEL);
orderRefundRequest.setReason(refundAgreeRequest.getReason());
orderRefundRequest.setOperator(refundAgreeRequest.getOperator());
orderRefundRequest.setOrderStatusV1(orderBean.getStatus());
if (PayRefundStatus.SUCCESS.equals(refundResponse.getPayRefundStatus())) {
orderRefundRequest.setCreateEvent(4);
} else {
orderRefundRequest.setCreateEvent(5);
}
baseOrderResponse = orderCenterSdkService.orderRefund(orderRefundRequest);
}
if (baseOrderResponse == null || ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(), baseOrderResponse.getErrcode().toString())) {
return ResponseUtil.error(ResponseResult.AGREE_REFUND_ORDER_FAIL);
}
return ResponseUtil.success();
}
// public BaseResponse mcCafeRefundAgree(OrderManagerRequest request, PayRefundResponse refundResponse, OrderBeanV1 orderBean) {
// BaseQueryOrderRequest refundAgreeRequest = orderSdkAdapter.getRefundAgreeRequest(refundResponse.getRefundId(), request.getReason(), request.getOperator(), orderBean);
// BaseOrderResponse baseOrderResponse = null;
// for(int i=0;i<orderBean.getRefundList().size();i++) {
//
// if (RefundStatusV1.APPLY_REFUND.getCodeV1().equals(orderBean.getRefundList().get(i).getStatus())) {
// refundAgreeRequest.setAfterSalesCode(orderBean.getRefundList().get(i).getRid());
// if (PayRefundStatus.SUCCESS.equals(refundResponse.getPayRefundStatus())) {
// baseOrderResponse = orderCenterSdkService.refundComplete(refundAgreeRequest);
// } else {
// baseOrderResponse = orderCenterSdkService.refundReturn(refundAgreeRequest);
// }
// break;
// } else if (RefundStatusV1.COMPLETE_REFUND.getCodeV1().equals(orderBean.getRefundList().get(i).getStatus())) {
// baseOrderResponse = new BaseOrderResponse();
// baseOrderResponse.setErrcode(Integer.valueOf(ResponseResult.AGREE_REFUND_ORDER_FAIL.getCode()));
// baseOrderResponse.setErrmsg("订单已经退款完成,不能重复申请");
// break;
// }
// }
// if(null == baseOrderResponse) {
// OrderRefundRequest orderRefundRequest = new OrderRefundRequest();
// orderRefundRequest.setPartnerId(refundAgreeRequest.getPartnerId());
// orderRefundRequest.setStoreId(refundAgreeRequest.getShopId());
// orderRefundRequest.setOrderId(refundAgreeRequest.getOrderId());
// orderRefundRequest.setOrderClient(OrderClientType.SAAS.getIndex());
//
// orderRefundRequest.setAfterSalesType(AfterSalesType.PARTNER_CANCEL);
// orderRefundRequest.setReason(refundAgreeRequest.getReason());
// orderRefundRequest.setOperator(refundAgreeRequest.getOperator());
// orderRefundRequest.setOrderStatusV1(orderBean.getStatus());
// if (PayRefundStatus.SUCCESS.equals(refundResponse.getPayRefundStatus())) {
// orderRefundRequest.setCreateEvent(4);
// } else {
// orderRefundRequest.setCreateEvent(5);
// }
// baseOrderResponse = orderCenterSdkService.orderRefund(orderRefundRequest);
// }
// if (baseOrderResponse == null || ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(), baseOrderResponse.getErrcode().toString())) {
// return ResponseUtil.error(ResponseResult.AGREE_REFUND_ORDER_FAIL);
// }
// return ResponseUtil.success();
// }
/**
* 拒绝退款
......
......@@ -41,6 +41,10 @@ public class StockHandle {
* @param orderBean
*/
public void revert(OrderManagerRequest request, OrderBeanV1 orderBean){
//同意退款退款中已经发起冲正
if(orderBean.getAfterSalesOrderResp() != null && orderBean.getAfterSalesOrderResp().getAfterSalesStatus() == 4){
return;
}
logUtil.info("backOrdersStatusChange oid:{},statusV2:{}", orderBean.getOid(), String.valueOf(orderBean.getStatusV2()));
OrderStatusChangeRequestDto requestDto = new OrderStatusChangeRequestDto();
requestDto.setOid(orderBean.getOid());
......
......@@ -191,13 +191,13 @@ public class MallOrderMangerServiceImpl implements OrderManagerService {
private PayRefundResponse payRefundCommon(OrderManagerRequest request, OrderBeanV1 orderBean) {
PayRefundResponse refundResponse = paymentHandle.getCommonPayRefundResponse(request, orderBean);
//同意退款失败记录到订单售后单
if (orderBean.getAfterSalesOrderResp() != null && refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.SUCCESS.getCode()) != 0) {
if (orderBean.getAfterSalesOrderResp() != null && refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.FAIL.getCode()) == 0) {
AfterSalesRefundFailReq refundFailReq = new AfterSalesRefundFailReq();
refundFailReq.setOrderCode(orderBean.getOid());
refundFailReq.setPartnerId(orderBean.getCompanyId());
refundFailReq.setRefundFailReason("退款失败或退款中," + refundResponse.getMessage());
refundFailReq.setAfterSalesCode(orderBean.getAfterSalesOrderResp().getAfterSalesCode());
refundFailReq.setOperationClient(request.getAfterSalesApplyClient());
refundFailReq.setOperationClient(request.getOperationClient());
refundFailReq.setOperator(request.getOperator());
orderSdkService.refundFail(refundFailReq, LogThreadLocal.getTrackingNo());
}
......
......@@ -150,13 +150,13 @@ public class NewMallOrderMangerServiceImpl implements OrderManagerService {
private PayRefundResponse payRefundCommon(OrderManagerRequest request, OrderBeanV1 orderBean) {
PayRefundResponse refundResponse = paymentHandle.getCommonPayRefundResponse(request, orderBean);
//同意退款失败记录到订单售后单
if (orderBean.getAfterSalesOrderResp() != null && refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.SUCCESS.getCode()) != 0) {
if (orderBean.getAfterSalesOrderResp() != null && refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.FAIL.getCode()) == 0) {
AfterSalesRefundFailReq refundFailReq = new AfterSalesRefundFailReq();
refundFailReq.setOrderCode(orderBean.getOid());
refundFailReq.setPartnerId(orderBean.getCompanyId());
refundFailReq.setRefundFailReason("退款失败或退款中," + refundResponse.getMessage());
refundFailReq.setAfterSalesCode(orderBean.getAfterSalesOrderResp().getAfterSalesCode());
refundFailReq.setOperationClient(request.getAfterSalesApplyClient());
refundFailReq.setOperationClient(request.getOperationClient());
refundFailReq.setOperator(request.getOperator());
orderSdkService.refundFail(refundFailReq, LogThreadLocal.getTrackingNo());
}
......
......@@ -212,9 +212,9 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.COMPATIBILITY_STATUS.getCode()) == 0) {
return ResponseUtil.error(refundResponse.getResult());
}
// fisherman --> 退款中的状态 阻止后续流程 等待支付回调 不是退款成功 都终止下面的退款流程
if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.SUCCESS.getCode()) != 0) {
return ResponseUtil.error(ResponseResult.REFUND_FAIL_WAIT_CALLBACK);
//退款失败终止下面的退款流程
if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.FAIL.getCode()) == 0) {
return ResponseUtil.error(ResponseResult.REFUND_FAIL.getCode(),refundResponse.getMessage());
}
//订单拒单
saasOrderHandle.orderReject(request, refundResponse, orderBean);
......@@ -244,9 +244,9 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.COMPATIBILITY_STATUS.getCode()) == 0) {
return ResponseUtil.error(refundResponse.getResult());
}
// fisherman --> 退款中的状态 阻止后续流程 等待支付回调 不是退款成功 都终止下面的退款流程
if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.SUCCESS.getCode()) != 0) {
return ResponseUtil.error(ResponseResult.REFUND_FAIL_WAIT_CALLBACK);
//退款失败终止下面的退款流程
if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.FAIL.getCode()) == 0) {
return ResponseUtil.error(ResponseResult.REFUND_FAIL.getCode(),refundResponse.getMessage());
}
//订单同意退款
......@@ -256,6 +256,9 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
//todo 可以考虑基于订单回调异步实现
//冲正库存
stockHandle.revert(request, orderBean);
if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.RUNNING.getCode()) == 0) {
return ResponseUtil.error(ResponseResult.REFUND_FAIL.getCode(),refundResponse.getMessage());
}
return ResponseUtil.success();
}
......@@ -268,14 +271,14 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
*/
private PayRefundResponse payRefundCommon(OrderManagerRequest request, OrderBeanV1 orderBean) {
PayRefundResponse refundResponse = paymentHandle.getCommonPayRefundResponse(request, orderBean);
//同意退款失败记录到订单售后单
if (orderBean.getAfterSalesOrderResp() != null && refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.SUCCESS.getCode()) != 0) {
//同意退款退款失败记录到订单售后单
if (orderBean.getAfterSalesOrderResp() != null && Objects.equals(PayRefundStatus.FAIL.getCode(),refundResponse.getPayRefundStatus().getCode())) {
AfterSalesRefundFailReq refundFailReq = new AfterSalesRefundFailReq();
refundFailReq.setOrderCode(orderBean.getOid());
refundFailReq.setPartnerId(orderBean.getCompanyId());
refundFailReq.setRefundFailReason("退款失败或退款中," + refundResponse.getMessage());
refundFailReq.setRefundFailReason(refundResponse.getMessage());
refundFailReq.setAfterSalesCode(orderBean.getAfterSalesOrderResp().getAfterSalesCode());
refundFailReq.setOperationClient(request.getAfterSalesApplyClient());
refundFailReq.setOperationClient(request.getOperationClient());
refundFailReq.setOperator(request.getOperator());
orderSdkService.refundFail(refundFailReq,LogThreadLocal.getTrackingNo());
}
......
......@@ -45,4 +45,14 @@ public class AfterSalesOperateReq {
//操作人
private String operator;
/**
* 操作来源客户端 1:POS插件 2:小助手 3:开放平台 4:自动任务 5:用户端 6:系统 7:万象 8:太一
*/
private Integer operationClient;
/**
* 售后退款状态 0:未定义(存量数据) 1:未退款 2:退款中 3:退款失败 4:已退款
*/
private Integer refundState;
}
......@@ -33,7 +33,7 @@ public class AfterSalesRefundFailReq {
private String refundFailReason;
/**
* 操作来源客户端
* 操作来源客户端 1:POS插件 2:小助手 3:开放平台 4:自动任务 5:用户端 6:系统 7:万象 8:太一
*/
private Integer operationClient;
......
......@@ -75,4 +75,14 @@ public class OrderCancelReq {
* 拓展信息
*/
private String extInfo;
/**
* 操作来源客户端 1:POS插件 2:小助手 3:开放平台 4:自动任务 5:用户端 6:系统 7:万象 8:太一
*/
private Integer operationClient;
/**
* 售后退款状态 0:未定义(存量数据) 1:未退款 2:退款中 3:退款失败 4:已退款
*/
private Integer refundState;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment