Commit f5e20fd3 by box

三方券订单退款退券

parent 25d2df21
......@@ -4,6 +4,7 @@ import cn.freemud.base.util.DateUtil;
import cn.freemud.management.enums.coupon.CouponThirdChannelEnum;
import cn.freemud.management.enums.coupon.EcologyChannelTypeEnum;
import cn.freemud.management.enums.SettlementTypeEnum;
import cn.freemud.management.enums.coupon.ThirdCouponReportStatusEnum;
import cn.freemud.management.enums.coupon.ThirdCouponReportTypeEnum;
import cn.freemud.management.intercept.CouponServiceException;
import cn.freemud.management.intercept.DeliveryServiceException;
......@@ -103,7 +104,7 @@ public class ThirdCouponOrderHandle {
* @param channelTypeEnum
* @return
*/
public static boolean isCancelTimeout(Date redeemDate, EcologyChannelTypeEnum channelTypeEnum) {
public static boolean isCancelTimeout(Date redeemDate, @Nullable EcologyChannelTypeEnum channelTypeEnum) {
if (EcologyChannelTypeEnum.MEITUAN.equals(channelTypeEnum)) {
// 美团券不能超过 60天
if (DateUtil.addDays(redeemDate, 60).compareTo(new Date()) < 0) {
......@@ -137,7 +138,9 @@ public class ThirdCouponOrderHandle {
ErrorLog.errorDev("查询券码服务失败");
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()) {
ErrorLog.errorDev("查询券码服务失败,无核销记录");
return null;
......@@ -145,21 +148,20 @@ public class ThirdCouponOrderHandle {
RedeemReportQueryResponse redeemReport = first.get();
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.setCouponCodes(couponCodes);
thirdCouponDto.setCanceled(canceled);
thirdCouponDto.setPartnerId(redeemReport.getPartnerId());
thirdCouponDto.setStoreId(redeemReport.getStoreId());
thirdCouponDto.setMemberId(redeemReport.getMemberId());
thirdCouponDto.setChannel(redeemReport.getChannel());
if (CouponThirdChannelEnum.MEI_TUAN.getChannel().equals(redeemReport.getChannel())) {
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);
} else {
ErrorLog.errorDev("查询订单三方券失败,券渠道不支持");
return null;
}
return thirdCouponDto;
......@@ -171,6 +173,11 @@ public class ThirdCouponOrderHandle {
/**
* 券渠道
*/
private Short channel;
/**
* 券渠道
*/
@Nullable
private EcologyChannelTypeEnum ecologyChannelType;
/**
* 券号列表
......
......@@ -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.enums.OperateType;
import cn.freemud.management.enums.*;
import cn.freemud.management.enums.coupon.ThirdCouponReportStatusEnum;
import cn.freemud.management.handler.AssisantApplicationHandler;
import cn.freemud.management.service.OrderBaseService;
import cn.freemud.management.service.OrderManagerService;
import cn.freemud.management.service.handle.*;
import cn.freemud.management.thirdparty.ConsoleApiClient;
import cn.freemud.management.thirdparty.CouponBackstageClient;
import cn.freemud.management.thirdparty.EcologyAdapterClient;
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.response.Result;
import cn.freemud.management.thirdparty.response.coupon.SaasResponse;
import cn.freemud.management.thirdparty.response.ecology.adapter.CancelRedeemCouponResponse;
import cn.freemud.management.util.ResponseUtil;
import com.alibaba.fastjson.JSONObject;
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.ordercenter.config.OrderCenterProperties;
import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
......@@ -109,6 +114,9 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
@Autowired
private EcologyAdapterClient ecologyAdapterClient;
@Autowired
private CouponBackstageClient couponBackstageClient;
/**
* 接单
*
......@@ -318,6 +326,8 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
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());
......@@ -328,20 +338,33 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
coupon.getCouponCodes().forEach(code -> {
req.setCode(code);
Result<CancelRedeemCouponResponse> result = ecologyAdapterClient.couponCancel(req);
ApiLog.infoMessage("冲正三方券:req:{},resp:{}", JSONObject.toJSONString(result), JSONObject.toJSONString(result));
ApiLog.infoMessage("冲正三方券:req:{},resp:{}", JSONObject.toJSONString(req), JSONObject.toJSONString(result));
if (!result.isStatus()) {
throw new RuntimeException("撤销核销失败,请重试");
}
if (result.getResult().getCancelResult().equals(CancelRedeemCouponResponse.Result.SUCCESS)) {
return;
}
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 = 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 @@
package cn.freemud.management.thirdparty;
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.SaasPageResponse;
import cn.freemud.management.thirdparty.response.coupon.SaasResponse;
......@@ -32,4 +33,13 @@ public interface CouponBackstageClient {
*/
@PostMapping("thirdChannelCoupon/redeemReport/query")
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