Commit ffaee0bb by box

Merge branch 'feature/box/三方券订单退款退券' into qa

parents ac8ab7af 56a9e92f
...@@ -23,6 +23,7 @@ import cn.freemud.management.enums.AfterSalesRefunStateEnum; ...@@ -23,6 +23,7 @@ import cn.freemud.management.enums.AfterSalesRefunStateEnum;
import cn.freemud.management.enums.coupon.EcologyChannelTypeEnum; import cn.freemud.management.enums.coupon.EcologyChannelTypeEnum;
import cn.freemud.management.service.adapter.OrderManagerAdapter; import cn.freemud.management.service.adapter.OrderManagerAdapter;
import cn.freemud.management.service.handle.*; import cn.freemud.management.service.handle.*;
import cn.freemud.management.util.ResponseUtil;
import cn.freemud.redis.RedisCache; import cn.freemud.redis.RedisCache;
import cn.freemud.service.impl.OrderQueueService; import cn.freemud.service.impl.OrderQueueService;
import cn.freemud.service.store.StoreManager; import cn.freemud.service.store.StoreManager;
...@@ -174,6 +175,9 @@ public class RefundService { ...@@ -174,6 +175,9 @@ public class RefundService {
// 未接单 // 未接单
if (NewOrderStatus.PLACE_AN_ORDER.getIndex().equals(order.getOrderState())) { if (NewOrderStatus.PLACE_AN_ORDER.getIndex().equals(order.getOrderState())) {
// 商家未接单逻辑处理 1.调用支付退款 2.根据支付退款返回状态组装订单取消参数,调用订单取消接口 // 商家未接单逻辑处理 1.调用支付退款 2.根据支付退款返回状态组装订单取消参数,调用订单取消接口
if (ThirdCouponOrderHandle.isThirdCouponOrder(order)) {
thirdCouponOrderHandle.thirdCouponRefund(partnerId, orderCode, order.getOperator());
}
refundOrder(order, isPartRefund, reason, remark, refundDeliveryFee, refundMode); refundOrder(order, isPartRefund, reason, remark, refundDeliveryFee, refundMode);
orderQueueService.backOrdersStatusChange(order.getOrderCode(), orderSdkAdapter.getOldStatus(order.getOrderState()), order.getPayState(), order.getPartnerId()); orderQueueService.backOrdersStatusChange(order.getOrderCode(), orderSdkAdapter.getOldStatus(order.getOrderState()), order.getPayState(), order.getPartnerId());
} else { } else {
......
...@@ -6,13 +6,17 @@ import cn.freemud.management.enums.coupon.EcologyChannelTypeEnum; ...@@ -6,13 +6,17 @@ import cn.freemud.management.enums.coupon.EcologyChannelTypeEnum;
import cn.freemud.management.enums.SettlementTypeEnum; import cn.freemud.management.enums.SettlementTypeEnum;
import cn.freemud.management.enums.coupon.ThirdCouponReportStatusEnum; import cn.freemud.management.enums.coupon.ThirdCouponReportStatusEnum;
import cn.freemud.management.enums.coupon.ThirdCouponReportTypeEnum; import cn.freemud.management.enums.coupon.ThirdCouponReportTypeEnum;
import cn.freemud.management.intercept.CouponServiceException;
import cn.freemud.management.intercept.DeliveryServiceException;
import cn.freemud.management.thirdparty.CouponBackstageClient; import cn.freemud.management.thirdparty.CouponBackstageClient;
import cn.freemud.management.thirdparty.CouponOfflineClient;
import cn.freemud.management.thirdparty.EcologyAdapterClient;
import cn.freemud.management.thirdparty.request.coupon.RedeemReportQueryRequest; import cn.freemud.management.thirdparty.request.coupon.RedeemReportQueryRequest;
import cn.freemud.management.thirdparty.request.coupon.ReverseThirdCouponRedeemReportReq;
import cn.freemud.management.thirdparty.request.ecology.adapter.CancelRedeemCouponRequest;
import cn.freemud.management.thirdparty.response.Result;
import cn.freemud.management.thirdparty.response.coupon.RedeemReportQueryResponse; import cn.freemud.management.thirdparty.response.coupon.RedeemReportQueryResponse;
import cn.freemud.management.thirdparty.response.coupon.SaasPageResponse; import cn.freemud.management.thirdparty.response.coupon.SaasPageResponse;
import cn.freemud.management.thirdparty.response.coupon.SaasResponse; import cn.freemud.management.thirdparty.response.coupon.SaasResponse;
import cn.freemud.management.thirdparty.response.ecology.adapter.CancelRedeemCouponResponse;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.log.ApiLog; import com.freemud.application.sdk.api.log.ApiLog;
import com.freemud.application.sdk.api.log.ErrorLog; import com.freemud.application.sdk.api.log.ErrorLog;
...@@ -22,7 +26,6 @@ import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoR ...@@ -22,7 +26,6 @@ import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoR
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderPayItemResp; import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderPayItemResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettlementResp; import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettlementResp;
import lombok.Data; import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
...@@ -40,6 +43,12 @@ import java.util.*; ...@@ -40,6 +43,12 @@ import java.util.*;
public class ThirdCouponOrderHandle { public class ThirdCouponOrderHandle {
@Autowired @Autowired
private CouponBackstageClient couponBackstageClient; private CouponBackstageClient couponBackstageClient;
@Autowired
private EcologyAdapterClient ecologyAdapterClient;
@Autowired
private CouponOfflineClient couponOfflineClient;
/** /**
* 判断订单中是否使用了三方券 * 判断订单中是否使用了三方券
* <pre> * <pre>
...@@ -157,6 +166,7 @@ public class ThirdCouponOrderHandle { ...@@ -157,6 +166,7 @@ public class ThirdCouponOrderHandle {
thirdCouponDto.setStoreId(redeemReport.getStoreId()); thirdCouponDto.setStoreId(redeemReport.getStoreId());
thirdCouponDto.setMemberId(redeemReport.getMemberId()); thirdCouponDto.setMemberId(redeemReport.getMemberId());
thirdCouponDto.setChannel(redeemReport.getChannel()); thirdCouponDto.setChannel(redeemReport.getChannel());
thirdCouponDto.setRedeemTime(redeemReport.getRedeemTime());
if (CouponThirdChannelEnum.MEI_TUAN.getChannel().equals(redeemReport.getChannel())) { if (CouponThirdChannelEnum.MEI_TUAN.getChannel().equals(redeemReport.getChannel())) {
thirdCouponDto.setEcologyChannelType(EcologyChannelTypeEnum.MEITUAN); thirdCouponDto.setEcologyChannelType(EcologyChannelTypeEnum.MEITUAN);
} else if (CouponThirdChannelEnum.DOU_YIN.getChannel().equals(redeemReport.getChannel())) { } else if (CouponThirdChannelEnum.DOU_YIN.getChannel().equals(redeemReport.getChannel())) {
...@@ -168,6 +178,62 @@ public class ThirdCouponOrderHandle { ...@@ -168,6 +178,62 @@ public class ThirdCouponOrderHandle {
} }
/**
* 三方券支付冲正
* <pre></pre>
* @param request
* @param orderBean
*/
public void thirdCouponRefund(String partnerId, String orderCode, String operator) {
ThirdCouponOrderHandle.ThirdCouponDto coupon = this.getCoupon(partnerId, orderCode);
if (coupon == null) {
throw new RuntimeException("三方券信息查询失败,请重试");
}
if (coupon.isCanceled()) {
return;
}
if (ThirdCouponOrderHandle.isCancelTimeout(coupon.getRedeemTime(), coupon.getEcologyChannelType())) {
throw new RuntimeException("核销时间超过可冲正期限,撤销核销失败");
}
// 美团、抖音平台三方券
if (coupon.getEcologyChannelType() != null) {
CancelRedeemCouponRequest req = new CancelRedeemCouponRequest();
req.setTxn(orderCode);
req.setStoreId(coupon.getStoreId());
req.setMemberId(coupon.getMemberId());
req.setPartnerId(coupon.getPartnerId());
req.setChannel(coupon.getEcologyChannelType().getVal());
req.setOperator(operator);
coupon.getCouponCodes().forEach(code -> {
req.setCode(code);
Result<CancelRedeemCouponResponse> result = ecologyAdapterClient.couponCancel(req);
ApiLog.infoMessage("冲正三方券:req:{},resp:{}", JSONObject.toJSONString(req), JSONObject.toJSONString(result));
if (!result.isStatus()) {
throw new RuntimeException("撤销核销失败,请重试");
}
if (result.getResult().getCancelResult().equals(CancelRedeemCouponResponse.Result.TIME_LIMITED)) {
throw new RuntimeException("核销时间超过可冲正期限,撤销核销失败");
}
if (!result.getResult().getCancelResult().equals(CancelRedeemCouponResponse.Result.SUCCESS)) {
throw new RuntimeException("撤销核销失败,请重试");
}
});
}
try {
// 记录冲正明细
ReverseThirdCouponRedeemReportReq couponRequest = new ReverseThirdCouponRedeemReportReq();
couponRequest.setPartnerId(coupon.getPartnerId());
couponRequest.setChannel(coupon.getChannel());
couponRequest.setOrderCode(orderCode);
couponRequest.setRedeemStatus(ThirdCouponReportStatusEnum.SUCCESS.getStatus());
SaasResponse<Object> reverseResp = couponOfflineClient.reverseThirdCouponRedeemReport(couponRequest);
ApiLog.infoMessage("冲正三方券记录明细:req:{},resp:{}", JSONObject.toJSONString(couponRequest), JSONObject.toJSONString(reverseResp));
} catch (Exception e) {
ErrorLog.errorDev("冲正三方券记录明细异常:", e, e.getMessage());
}
}
@Data @Data
public static class ThirdCouponDto { public static class ThirdCouponDto {
/** /**
...@@ -202,5 +268,10 @@ public class ThirdCouponOrderHandle { ...@@ -202,5 +268,10 @@ public class ThirdCouponOrderHandle {
* 会员 id * 会员 id
*/ */
private String memberId; private String memberId;
/**
* 核销或冲正时间
*/
private Date redeemTime;
} }
} }
...@@ -225,11 +225,13 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -225,11 +225,13 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
@Override @Override
public BaseResponse<OrderManagerResponse> orderReject(OrderManagerRequest request, OrderBeanV1 orderBean) { public BaseResponse<OrderManagerResponse> orderReject(OrderManagerRequest request, OrderBeanV1 orderBean) {
// 三方券支付冲正 // 三方券支付冲正
if (ThirdCouponOrderHandle.isThirdCouponOrder(orderBean)) {
try { try {
this.thirdCouponRefund(request, orderBean); thirdCouponOrderHandle.thirdCouponRefund(request.getPartnerId(), request.getOrderId(), request.getOperator());
} catch (Exception e) { } catch (Exception e) {
return ResponseUtil.error(e.getMessage()); return ResponseUtil.error(e.getMessage());
} }
}
PayRefundResponse refundResponse = null; PayRefundResponse refundResponse = null;
// 支付退款 包括线上小程序付款的订单,订单宝其他支付方式收款(汇来米,收钱吧,现金,其他) // 支付退款 包括线上小程序付款的订单,订单宝其他支付方式收款(汇来米,收钱吧,现金,其他)
...@@ -267,11 +269,13 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -267,11 +269,13 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
deliveryHandle.cancelDelivery(orderBean, request); deliveryHandle.cancelDelivery(orderBean, request);
// 三方券支付冲正 // 三方券支付冲正
if (ThirdCouponOrderHandle.isThirdCouponOrder(orderBean)) {
try { try {
this.thirdCouponRefund(request, orderBean); thirdCouponOrderHandle.thirdCouponRefund(request.getPartnerId(), request.getOrderId(), request.getOperator());
} catch (Exception e) { } catch (Exception e) {
return ResponseUtil.error(e.getMessage()); return ResponseUtil.error(e.getMessage());
} }
}
// 支付退款 包括线上小程序付款的订单,订单宝其他支付方式收款(汇来米,收钱吧,现金,其他)老板通发起退款 // 支付退款 包括线上小程序付款的订单,订单宝其他支付方式收款(汇来米,收钱吧,现金,其他)老板通发起退款
PayRefundResponse refundResponse = this.payRefundCommon(request, orderBean); PayRefundResponse refundResponse = this.payRefundCommon(request, orderBean);
...@@ -300,67 +304,6 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -300,67 +304,6 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
} }
return ResponseUtil.success(); return ResponseUtil.success();
} }
/**
* 三方券支付冲正
* <pre></pre>
* @param request
* @param orderBean
*/
private void thirdCouponRefund(OrderManagerRequest request, OrderBeanV1 orderBean) {
if (!ThirdCouponOrderHandle.isThirdCouponOrder(orderBean)) {
return;
}
ThirdCouponOrderHandle.ThirdCouponDto coupon = thirdCouponOrderHandle.getCoupon(request.getPartnerId(), request.getOrderId());
if (coupon == null) {
throw new RuntimeException("三方券信息查询失败,请重试");
}
if (coupon.isCanceled()) {
return;
}
Date orderCreateDate = new Date(orderBean.getGmtCreate());
if (ThirdCouponOrderHandle.isCancelTimeout(orderCreateDate, coupon.getEcologyChannelType())) {
throw new RuntimeException("核销时间超过可冲正期限,撤销核销失败");
}
// 美团、抖音平台三方券
if (coupon.getEcologyChannelType() != null) {
CancelRedeemCouponRequest req = new CancelRedeemCouponRequest();
req.setTxn(request.getOrderId());
req.setStoreId(coupon.getStoreId());
req.setMemberId(coupon.getMemberId());
req.setPartnerId(coupon.getPartnerId());
req.setChannel(coupon.getEcologyChannelType().getVal());
req.setOperator(request.getOperator());
coupon.getCouponCodes().forEach(code -> {
req.setCode(code);
Result<CancelRedeemCouponResponse> result = ecologyAdapterClient.couponCancel(req);
ApiLog.infoMessage("冲正三方券:req:{},resp:{}", JSONObject.toJSONString(req), JSONObject.toJSONString(result));
if (!result.isStatus()) {
throw new RuntimeException("撤销核销失败,请重试");
}
if (result.getResult().getCancelResult().equals(CancelRedeemCouponResponse.Result.TIME_LIMITED)) {
throw new RuntimeException("核销时间超过可冲正期限,撤销核销失败");
}
if (!result.getResult().getCancelResult().equals(CancelRedeemCouponResponse.Result.SUCCESS)) {
throw new RuntimeException("撤销核销失败,请重试");
}
});
}
try {
// 记录冲正明细
ReverseThirdCouponRedeemReportReq couponRequest = new ReverseThirdCouponRedeemReportReq();
couponRequest.setPartnerId(coupon.getPartnerId());
couponRequest.setChannel(coupon.getChannel());
couponRequest.setOrderCode(request.getOrderId());
couponRequest.setRedeemStatus(ThirdCouponReportStatusEnum.SUCCESS.getStatus());
SaasResponse<Object> reverseResp = couponOfflineClient.reverseThirdCouponRedeemReport(couponRequest);
ApiLog.infoMessage("冲正三方券记录明细:req:{},resp:{}", JSONObject.toJSONString(couponRequest), JSONObject.toJSONString(reverseResp));
} catch (Exception e) {
ErrorLog.errorDev("冲正三方券记录明细异常:", e, e.getMessage());
}
}
/** /**
* 拒单退款、同意退款、取消订单退款 * 拒单退款、同意退款、取消订单退款
* 小程序点餐订单退款,无单收银退款,订单宝扫码付、其他支付方式收款(汇来米,收钱吧,现金,其他)等有支付流水等退款 * 小程序点餐订单退款,无单收银退款,订单宝扫码付、其他支付方式收款(汇来米,收钱吧,现金,其他)等有支付流水等退款
...@@ -529,11 +472,13 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -529,11 +472,13 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
public BaseResponse<OrderManagerResponse> posCancel(OrderBeanV1 order, OrderManagerRequest request) { public BaseResponse<OrderManagerResponse> posCancel(OrderBeanV1 order, OrderManagerRequest request) {
// 三方券支付冲正 // 三方券支付冲正
if (ThirdCouponOrderHandle.isThirdCouponOrder(order)) {
try { try {
this.thirdCouponRefund(request, order); thirdCouponOrderHandle.thirdCouponRefund(request.getPartnerId(), request.getOrderId(), request.getOperator());
} catch (Exception e) { } catch (Exception e) {
return ResponseUtil.error(e.getMessage()); return ResponseUtil.error(e.getMessage());
} }
}
//调用cancel接口,商家退款 //调用cancel接口,商家退款
OrderCancelReq orderCancelReq = new OrderCancelReq(); OrderCancelReq orderCancelReq = new OrderCancelReq();
orderCancelReq.setPartnerId(order.getCompanyId()); orderCancelReq.setPartnerId(order.getCompanyId());
......
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