Commit 1f540623 by box

Merge branch 'feature/box/券包退款' into develop

parents 5b41ab99 1bb497d9
package cn.freemud.management.entities.dto.response.coupon;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/11/9 下午2:45
* @description :
*/
@Data
public class CouponBaseResponse<T> {
private Integer statusCode;
/**
* 返回信息
*/
private String msg;
private T result;
}
...@@ -56,6 +56,11 @@ public class OrderBeanFactory { ...@@ -56,6 +56,11 @@ public class OrderBeanFactory {
return applicationContext.getBean(NewMallOrderMangerServiceImpl.class); return applicationContext.getBean(NewMallOrderMangerServiceImpl.class);
} }
// 卖券订单,根据业务类型
if(Objects.equals(BizTypeEnum.SALE_COUPON.getBizType(),orderBean.getBizType())){
return applicationContext.getBean(SaleCouponOrderMangerServiceImpl.class);
}
return applicationContext.getBean(SaasOrderMangerServiceImpl.class); return applicationContext.getBean(SaasOrderMangerServiceImpl.class);
} }
} }
package cn.freemud.management.service.impl;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.management.adapter.OrderCancelReqAdapter;
import cn.freemud.management.constant.ResponseCodeConstant;
import cn.freemud.management.entities.dto.request.console.*;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.request.order.RefundSuccessCallbackVo;
import cn.freemud.management.entities.dto.response.coupon.CouponBaseResponse;
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.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.CouponOnlineClient;
import cn.freemud.management.thirdparty.OrderCallbackClient;
import cn.freemud.management.thirdparty.request.coupon.BatchCouponDiscardReq;
import cn.freemud.management.thirdparty.request.coupon.CouponUnFreezeReq;
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.LogThreadLocal;
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.vo.OrderCallBackRequestVo;
import com.freemud.application.sdk.api.ordercenter.enums.*;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderSourceV1;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderStatusV1;
import com.freemud.application.sdk.api.ordercenter.request.AfterSalesRefundFailReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderCancelReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderExpressReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.AfterSalesOrderResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettlementResp;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import com.freemud.application.sdk.api.service.EmailAlertService;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrderByIdResponse;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static cn.freemud.management.enums.OperateType.ORDER_AGREE_REFUND;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: rrr
* @Package cn.freemud.management.service.impl
* @Description: saas订单履单操作
* @author: shuhu.hou
* @date: 2020/3/26 16:01
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Service
public class SaleCouponOrderMangerServiceImpl extends SaasOrderMangerServiceImpl {
@Autowired
private CouponOnlineClient couponOnlineClient;
@Value("${coupon.partner.id:1983}")
private String couponPartnerId;
/**
* 同意退款
*
* @param request
* @param orderBean
* @return
*/
@Override
public BaseResponse<OrderManagerResponse> orderAgreeRefund(OrderManagerRequest request, OrderBeanV1 orderBean) {
// 退款前先作废券
if (BizTypeEnum.SALE_COUPON.getBizType().equals(orderBean.getBizType())) {
List<String> couponCodes = Optional.ofNullable(orderBean.getOrderSettlementDetailList()).orElse(new ArrayList<>()).stream()
// 216 = 买券订单的券信息
.filter(dto -> Objects.equals(216, dto.getSettlementType()) && StringUtils.isNotBlank(dto.getExternalObjectId()))
.map(OrderSettlementResp::getExternalObjectId)
.collect(Collectors.toList());
BatchCouponDiscardReq discardReq = new BatchCouponDiscardReq();
discardReq.setCoupons(couponCodes.stream().map(code -> {
return new BatchCouponDiscardReq.CouponInfo(){{
setCode(code);
setMemberId(orderBean.getUserId());
}};
}).collect(Collectors.toList()));
discardReq.setPartnerId(request.getPartnerId());
discardReq.setProviderId(couponPartnerId);
discardReq.setCancelReason("券包订单退款");
CouponBaseResponse<Object> discardResp = couponOnlineClient.batchDiscard(discardReq);
if (!Objects.equals(discardResp.getStatusCode(), 100)) {
return ResponseUtil.error(ResponseResult.SYSTEM_ERROR.getCode(), "作废优惠券失败");
}
}
// 执行退款
return super.orderAgreeRefund(request, orderBean);
}
/**
* 拒绝退款
*
* @param request
* @param orderBean
* @return
*/
@Override
public BaseResponse<OrderManagerResponse> orderRejectRefund(OrderManagerRequest request, OrderBeanV1 orderBean) {
BaseResponse<OrderManagerResponse> response = super.orderRejectRefund(request, orderBean);
// 拒绝后解冻券
try {
if (BizTypeEnum.SALE_COUPON.getBizType().equals(orderBean.getBizType())) {
List<String> couponCodes = Optional.ofNullable(orderBean.getOrderSettlementDetailList()).orElse(new ArrayList<>()).stream()
// 216 = 买券订单的券信息
.filter(dto -> Objects.equals(216, dto.getSettlementType()) && StringUtils.isNotBlank(dto.getExternalObjectId()))
.map(OrderSettlementResp::getExternalObjectId)
.collect(Collectors.toList());
if (!couponCodes.isEmpty()) {
CouponUnFreezeReq unFreezeReq = new CouponUnFreezeReq();
unFreezeReq.setCoupons(couponCodes.stream().map(code -> {
return new CouponUnFreezeReq.CouponInfo(){{
setCode(code);
setMemberId(orderBean.getUserId());
}};
}).collect(Collectors.toList()));
unFreezeReq.setPartnerId(request.getPartnerId());
CouponBaseResponse<Object> unfreezeResp = couponOnlineClient.unfreeze(unFreezeReq);
if (!Objects.equals(unfreezeResp.getStatusCode(), 100)) {
ApiLog.warnMessage("refundReject 解冻券失败:{}", JSONObject.toJSONString(unfreezeResp));
}
}
}
} catch (Exception e) {
ApiLog.warnMessage("refundReject 解冻券异常.error orderCode={}, ex:{}", request.getOrderId(), e.getMessage());
}
return response;
}
}
package cn.freemud.management.thirdparty;
import cn.freemud.management.entities.dto.response.coupon.CouponBaseResponse;
import cn.freemud.management.thirdparty.request.coupon.BatchCouponDiscardReq;
import cn.freemud.management.thirdparty.request.coupon.CouponUnFreezeReq;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
//@IgnoreFeignLogAnnotation
@FeignClient(contextId = "coupon-online-service-management", name = "OPEN-STORE-ONLINE-COUPON-SERVICE", url = "${saas.coupononlineclient.feign.url:}")
public interface CouponOnlineClient {
/**
* 批量作废券(包括会员卡包中的券)
* <pre></pre>
* @param req
* @return
*/
@PostMapping("coupon/standard/discard")
CouponBaseResponse<Object> batchDiscard(BatchCouponDiscardReq req);
/**
* 解冻券,请求券号列表中,所有券号尾号必须一样
* <pre></pre>
* @param req
* @return
*/
@PostMapping("coupon/standard/ops/unfreeze")
CouponBaseResponse<Object> unfreeze(CouponUnFreezeReq req);
}
package cn.freemud.management.thirdparty.request.coupon;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.List;
/**
* 作废券请求参数
*
* @author tony
*/
@Data
public class BatchCouponDiscardReq {
@Size(min = 1, message = "作废的券信息不能为空")
private List<CouponInfo> coupons;
@NotBlank(message = "商户编号不能为空")
private String partnerId;
@NotBlank(message = "渠道编号不能为空")
private String providerId;
@NotBlank(message = "作废原因不能为空")
private String cancelReason;
@Valid
@Data
public static class CouponInfo {
@NotBlank(message = "会员ID不能为空")
private String memberId;
@NotBlank(message = "券号不能为空")
private String code;
}
@ApiModelProperty("接口版本,=1:不校验券是否属于传入的会员id。>1:校验")
private int ver = 1;
}
package cn.freemud.management.thirdparty.request.coupon;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.List;
/**
* 冻结券请求参数
*
* @author tony
*/
@Data
public class CouponUnFreezeReq {
@Size(min = 1, max = 20, message = "操作的券信息不能为空且最多支持20张")
private List<CouponInfo> coupons;
@NotBlank(message = "商户编号不能为空")
private String partnerId;
@Valid
@Data
public static class CouponInfo {
private String memberId;
@NotBlank(message = "券号不能为空")
private String code;
}
}
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