Commit f5e20fd3 by box

三方券订单退款退券

parent 25d2df21
...@@ -4,6 +4,7 @@ import cn.freemud.base.util.DateUtil; ...@@ -4,6 +4,7 @@ import cn.freemud.base.util.DateUtil;
import cn.freemud.management.enums.coupon.CouponThirdChannelEnum; import cn.freemud.management.enums.coupon.CouponThirdChannelEnum;
import cn.freemud.management.enums.coupon.EcologyChannelTypeEnum; 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.ThirdCouponReportTypeEnum; import cn.freemud.management.enums.coupon.ThirdCouponReportTypeEnum;
import cn.freemud.management.intercept.CouponServiceException; import cn.freemud.management.intercept.CouponServiceException;
import cn.freemud.management.intercept.DeliveryServiceException; import cn.freemud.management.intercept.DeliveryServiceException;
...@@ -103,7 +104,7 @@ public class ThirdCouponOrderHandle { ...@@ -103,7 +104,7 @@ public class ThirdCouponOrderHandle {
* @param channelTypeEnum * @param channelTypeEnum
* @return * @return
*/ */
public static boolean isCancelTimeout(Date redeemDate, EcologyChannelTypeEnum channelTypeEnum) { public static boolean isCancelTimeout(Date redeemDate, @Nullable EcologyChannelTypeEnum channelTypeEnum) {
if (EcologyChannelTypeEnum.MEITUAN.equals(channelTypeEnum)) { if (EcologyChannelTypeEnum.MEITUAN.equals(channelTypeEnum)) {
// 美团券不能超过 60天 // 美团券不能超过 60天
if (DateUtil.addDays(redeemDate, 60).compareTo(new Date()) < 0) { if (DateUtil.addDays(redeemDate, 60).compareTo(new Date()) < 0) {
...@@ -137,7 +138,9 @@ public class ThirdCouponOrderHandle { ...@@ -137,7 +138,9 @@ public class ThirdCouponOrderHandle {
ErrorLog.errorDev("查询券码服务失败"); ErrorLog.errorDev("查询券码服务失败");
return null; return null;
} }
Optional<RedeemReportQueryResponse> first = saasResponse.getResult().getList().stream().filter(resp -> ThirdCouponReportTypeEnum.REDEEM.getType().equals(resp.getRedeemType())).findFirst(); Optional<RedeemReportQueryResponse> first = saasResponse.getResult().getList().stream()
.filter(resp -> ThirdCouponReportTypeEnum.REDEEM.getType().equals(resp.getRedeemType()) && ThirdCouponReportStatusEnum.SUCCESS.getStatus().equals(resp.getRedeemStatus()))
.findFirst();
if (!first.isPresent()) { if (!first.isPresent()) {
ErrorLog.errorDev("查询券码服务失败,无核销记录"); ErrorLog.errorDev("查询券码服务失败,无核销记录");
return null; return null;
...@@ -145,21 +148,20 @@ public class ThirdCouponOrderHandle { ...@@ -145,21 +148,20 @@ public class ThirdCouponOrderHandle {
RedeemReportQueryResponse redeemReport = first.get(); RedeemReportQueryResponse redeemReport = first.get();
List<String> couponCodes = Arrays.asList(redeemReport.getCouponCode().split(",")); List<String> couponCodes = Arrays.asList(redeemReport.getCouponCode().split(","));
boolean canceled = saasResponse.getResult().getList().stream().anyMatch(resp -> ThirdCouponReportTypeEnum.REVERSE.getType().equals(resp.getRedeemType())); boolean canceled = saasResponse.getResult().getList().stream()
.anyMatch(resp -> ThirdCouponReportTypeEnum.REVERSE.getType().equals(resp.getRedeemType()) && ThirdCouponReportStatusEnum.SUCCESS.getStatus().equals(resp.getRedeemStatus()));
ThirdCouponDto thirdCouponDto = new ThirdCouponDto(); ThirdCouponDto thirdCouponDto = new ThirdCouponDto();
thirdCouponDto.setCouponCodes(couponCodes); thirdCouponDto.setCouponCodes(couponCodes);
thirdCouponDto.setCanceled(canceled); thirdCouponDto.setCanceled(canceled);
thirdCouponDto.setPartnerId(redeemReport.getPartnerId()); thirdCouponDto.setPartnerId(redeemReport.getPartnerId());
thirdCouponDto.setStoreId(redeemReport.getStoreId()); thirdCouponDto.setStoreId(redeemReport.getStoreId());
thirdCouponDto.setMemberId(redeemReport.getMemberId()); thirdCouponDto.setMemberId(redeemReport.getMemberId());
thirdCouponDto.setChannel(redeemReport.getChannel());
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()) || CouponThirdChannelEnum.UNKNOWN.getChannel().equals(redeemReport.getChannel())) { } else if (CouponThirdChannelEnum.DOU_YIN.getChannel().equals(redeemReport.getChannel())) {
// 未知渠道的为早期对接抖音时的数据,默认为抖音渠道 // 未知渠道的为早期对接抖音时的数据,默认为抖音渠道
thirdCouponDto.setEcologyChannelType(EcologyChannelTypeEnum.TIKTOK); thirdCouponDto.setEcologyChannelType(EcologyChannelTypeEnum.TIKTOK);
} else {
ErrorLog.errorDev("查询订单三方券失败,券渠道不支持");
return null;
} }
return thirdCouponDto; return thirdCouponDto;
...@@ -171,6 +173,11 @@ public class ThirdCouponOrderHandle { ...@@ -171,6 +173,11 @@ public class ThirdCouponOrderHandle {
/** /**
* 券渠道 * 券渠道
*/ */
private Short channel;
/**
* 券渠道
*/
@Nullable
private EcologyChannelTypeEnum ecologyChannelType; private EcologyChannelTypeEnum ecologyChannelType;
/** /**
* 券号列表 * 券号列表
......
...@@ -11,19 +11,24 @@ import cn.freemud.management.entities.dto.response.order.OrderManagerResponse; ...@@ -11,19 +11,24 @@ import cn.freemud.management.entities.dto.response.order.OrderManagerResponse;
import cn.freemud.management.entities.dto.response.pay.PayRefundResponse; import cn.freemud.management.entities.dto.response.pay.PayRefundResponse;
import cn.freemud.management.enums.OperateType; import cn.freemud.management.enums.OperateType;
import cn.freemud.management.enums.*; import cn.freemud.management.enums.*;
import cn.freemud.management.enums.coupon.ThirdCouponReportStatusEnum;
import cn.freemud.management.handler.AssisantApplicationHandler; import cn.freemud.management.handler.AssisantApplicationHandler;
import cn.freemud.management.service.OrderBaseService; import cn.freemud.management.service.OrderBaseService;
import cn.freemud.management.service.OrderManagerService; import cn.freemud.management.service.OrderManagerService;
import cn.freemud.management.service.handle.*; import cn.freemud.management.service.handle.*;
import cn.freemud.management.thirdparty.ConsoleApiClient; import cn.freemud.management.thirdparty.ConsoleApiClient;
import cn.freemud.management.thirdparty.CouponBackstageClient;
import cn.freemud.management.thirdparty.EcologyAdapterClient; import cn.freemud.management.thirdparty.EcologyAdapterClient;
import cn.freemud.management.thirdparty.OrderCallbackClient; import cn.freemud.management.thirdparty.OrderCallbackClient;
import cn.freemud.management.thirdparty.request.coupon.ReverseThirdCouponRedeemReportReq;
import cn.freemud.management.thirdparty.request.ecology.adapter.CancelRedeemCouponRequest; import cn.freemud.management.thirdparty.request.ecology.adapter.CancelRedeemCouponRequest;
import cn.freemud.management.thirdparty.response.Result; import cn.freemud.management.thirdparty.response.Result;
import cn.freemud.management.thirdparty.response.coupon.SaasResponse;
import cn.freemud.management.thirdparty.response.ecology.adapter.CancelRedeemCouponResponse; import cn.freemud.management.thirdparty.response.ecology.adapter.CancelRedeemCouponResponse;
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.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.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;
import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1; import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
...@@ -109,6 +114,9 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -109,6 +114,9 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
@Autowired @Autowired
private EcologyAdapterClient ecologyAdapterClient; private EcologyAdapterClient ecologyAdapterClient;
@Autowired
private CouponBackstageClient couponBackstageClient;
/** /**
* 接单 * 接单
* *
...@@ -318,28 +326,43 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -318,28 +326,43 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
if (ThirdCouponOrderHandle.isCancelTimeout(orderCreateDate, coupon.getEcologyChannelType())) { if (ThirdCouponOrderHandle.isCancelTimeout(orderCreateDate, coupon.getEcologyChannelType())) {
throw new RuntimeException("核销时间超过可冲正期限,撤销核销失败"); throw new RuntimeException("核销时间超过可冲正期限,撤销核销失败");
} }
CancelRedeemCouponRequest req = new CancelRedeemCouponRequest(); // 美团、抖音平台三方券
req.setTxn(request.getOrderId()); if (coupon.getEcologyChannelType() != null) {
req.setStoreId(coupon.getStoreId()); CancelRedeemCouponRequest req = new CancelRedeemCouponRequest();
req.setMemberId(coupon.getMemberId()); req.setTxn(request.getOrderId());
req.setPartnerId(coupon.getPartnerId()); req.setStoreId(coupon.getStoreId());
req.setChannel(coupon.getEcologyChannelType().getVal()); req.setMemberId(coupon.getMemberId());
req.setOperator(request.getOperator()); req.setPartnerId(coupon.getPartnerId());
coupon.getCouponCodes().forEach(code -> { req.setChannel(coupon.getEcologyChannelType().getVal());
req.setCode(code); req.setOperator(request.getOperator());
Result<CancelRedeemCouponResponse> result = ecologyAdapterClient.couponCancel(req); coupon.getCouponCodes().forEach(code -> {
ApiLog.infoMessage("冲正三方券:req:{},resp:{}", JSONObject.toJSONString(result), JSONObject.toJSONString(result)); req.setCode(code);
if (!result.isStatus()) { Result<CancelRedeemCouponResponse> result = ecologyAdapterClient.couponCancel(req);
throw new RuntimeException("撤销核销失败,请重试"); ApiLog.infoMessage("冲正三方券:req:{},resp:{}", JSONObject.toJSONString(req), JSONObject.toJSONString(result));
} if (!result.isStatus()) {
if (result.getResult().getCancelResult().equals(CancelRedeemCouponResponse.Result.SUCCESS)) { throw new RuntimeException("撤销核销失败,请重试");
return; }
} if (result.getResult().getCancelResult().equals(CancelRedeemCouponResponse.Result.TIME_LIMITED)) {
if (result.getResult().getCancelResult().equals(CancelRedeemCouponResponse.Result.TIME_LIMITED)) { throw new RuntimeException("核销时间超过可冲正期限,撤销核销失败");
throw new RuntimeException("核销时间超过可冲正期限,撤销核销失败"); }
} if (!result.getResult().getCancelResult().equals(CancelRedeemCouponResponse.Result.SUCCESS)) {
throw new RuntimeException("撤销核销失败,请重试"); 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 = couponBackstageClient.reverseThirdCouponRedeemReport(couponRequest);
ApiLog.infoMessage("冲正三方券记录明细:req:{},resp:{}", JSONObject.toJSONString(couponRequest), JSONObject.toJSONString(reverseResp));
} catch (Exception e) {
ErrorLog.errorDev("冲正三方券记录明细异常:", e, e.getMessage());
}
} }
/** /**
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
package cn.freemud.management.thirdparty; package cn.freemud.management.thirdparty;
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.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;
...@@ -32,4 +33,13 @@ public interface CouponBackstageClient { ...@@ -32,4 +33,13 @@ public interface CouponBackstageClient {
*/ */
@PostMapping("thirdChannelCoupon/redeemReport/query") @PostMapping("thirdChannelCoupon/redeemReport/query")
SaasResponse<SaasPageResponse<RedeemReportQueryResponse>> queryCodesInfo(RedeemReportQueryRequest request); SaasResponse<SaasPageResponse<RedeemReportQueryResponse>> queryCodesInfo(RedeemReportQueryRequest request);
/**
* 冲正三方券核销明细
* <pre></pre>
* @param couponRequest
* @return
*/
@PostMapping(value = "/thirdChannelCoupon/redeemReport/reverse")
SaasResponse<Object> reverseThirdCouponRedeemReport(ReverseThirdCouponRedeemReportReq couponRequest);
} }
package cn.freemud.management.thirdparty.request.coupon;
import cn.freemud.management.enums.coupon.ThirdCouponReportStatusEnum;
import lombok.Data;
/**
* &copy; All rights Reserved
*
* @author wénkǎi.zhāng 2023-11-29
* @since 1.0
*/
@Data
public class ReverseThirdCouponRedeemReportReq {
/**
* 商户号
*/
private String partnerId;
/**
* {@link cn.freemud.management.enums.coupon.CouponThirdChannelEnum#channel}
*/
private Short channel;
/**
* 订单编号
*/
private String orderCode;
/**
* 是否冲正成功,1-成功,2-失败,不传默认成功
* {@link ThirdCouponReportStatusEnum#status}
*/
private Short redeemStatus = 1;
}
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