Commit b3e6f2ac by 周晓航

前置处理 会员服务校验 以及券作废校验

Signed-off-by: 周晓航 <xiaohang.zhou@freemud.com>
parent f32e91f7
......@@ -13,6 +13,11 @@ import java.util.List;
*/
@Data
public class CheckAndCancelResponseDTO {
public static int SUCCESS = 1;
public static int PROTION_FAIL = 2;
public static int FAIL = 3;
@ApiModelProperty(value = "作废结果,1:已全部作废,2:部分作废失败,3:不可作废", required = true)
private Integer resultCode;
......
package cn.freemud.entities.dto.user;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/12/6 上午11:36
* @description :
*/
@Data
public class UserBaseResponsDTO<T> {
private String code;
private String message;
private T data;
}
package cn.freemud.entities.dto.user;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/12/6 上午11:35
* @description :
*/
@Data
public class UserCouponCheckRequest {
@ApiModelProperty(value = "商户号", required = true)
private String partnerId;
@ApiModelProperty(value = "会员id", required = true)
private String memberId;
@ApiModelProperty(value = "券号列表", required = true)
private List<String> couponCodes;
}
......@@ -24,6 +24,9 @@ import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseDto;
import cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseObj;
import cn.freemud.entities.dto.activity.PayGitCheckAndJoinRequestDto;
import cn.freemud.entities.dto.coupon.CheckAndCancelRequest;
import cn.freemud.entities.dto.coupon.CheckAndCancelResponseDTO;
import cn.freemud.entities.dto.coupon.CouponResponseDTO;
import cn.freemud.entities.dto.delivery.*;
import cn.freemud.entities.dto.ecology.SendMessageRequest;
import cn.freemud.entities.dto.openplatform.QueryInvoiceConfigRequest;
......@@ -38,6 +41,8 @@ import cn.freemud.entities.dto.shoppingCart.CollageOrderDto;
import cn.freemud.entities.dto.shoppingCart.NewShoppingCartClearDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.dto.store.StoreMixResponseDto;
import cn.freemud.entities.dto.user.UserBaseResponsDTO;
import cn.freemud.entities.dto.user.UserCouponCheckRequest;
import cn.freemud.entities.vo.*;
import cn.freemud.entities.vo.order.*;
import cn.freemud.enums.OrderType;
......@@ -265,6 +270,10 @@ public class OrderServiceImpl implements Orderservice {
@Autowired
private WeChatLiveMsgHandle weChatLiveMsgHandle;
@Autowired
private CouponOnlineClient couponOnlineClient;
@Autowired
private CustomerExtendClient customerExtendClient;
// @Override
// public BaseResponse checkBeforeCreateOrder(CheckBeforeCreateOrderRequestVo requestVo) {
// String trackingNo = LogThreadLocal.getTrackingNo();
......@@ -3353,6 +3362,10 @@ public class OrderServiceImpl implements Orderservice {
return checkResult;
}
// fisherman 调用会员获取券的有效性,是否有转赠状态
checkResult = this.customerExtendHandle(orderBean);
if (!Objects.equals(checkResult.getCode(), ResponseResult.SUCCESS.getCode())) {
return checkResult;
}
// fisherman 券作废
checkResult = this.couponOnLineHandle(orderBean);
......@@ -3360,8 +3373,6 @@ public class OrderServiceImpl implements Orderservice {
return checkResult;
}
// 走正常退款订单逻辑 这里是否可以丢MQ 异步操作
try {
this.doCouponOrderRefund(orderBean, orderRefundVo);
......@@ -3378,6 +3389,34 @@ public class OrderServiceImpl implements Orderservice {
}
/**
*
* @param orderBean
* @return
*/
private BaseResponse customerExtendHandle(OrderBeanV1 orderBean) {
BaseResponse<List<String>> baseResponse = this.couponOrderCommomCheck(orderBean);
if (baseResponse.getCode().compareTo(ResponseResult.SUCCESS.getCode()) != 0) {
return baseResponse;
}
// 获取优惠券
List<String> couponCodeList = baseResponse.getResult();
UserCouponCheckRequest request = new UserCouponCheckRequest();
request.setPartnerId(orderBean.getCompanyId());
request.setMemberId(orderBean.getUserId());
request.setCouponCodes(couponCodeList);
UserBaseResponsDTO<List<String>> responsDTO = customerExtendClient.getMemberCouponCodes(request);
if (responsDTO == null || !Objects.equals(responsDTO.getCode(), ResponseResult.SUCCESS.getCode())) {
return ResponseUtil.error(ResponseResult.OPERATE_NOT_SUPPORT, "会员服务调用失败");
}
List<String> responsDTOData = responsDTO.getData();
if (responsDTOData.retainAll(couponCodeList)) {
return ResponseUtil.success();
}
// fisherman 文案让产品提供
return ResponseUtil.error(ResponseResult.OPERATE_NOT_SUPPORT, "用户优惠券发生变动,无法退款");
}
/**
* 调用券码作废操作
* @param orderBean
* @return
......@@ -3386,6 +3425,35 @@ public class OrderServiceImpl implements Orderservice {
if (orderBean.getBizType().compareTo(BizTypeEnum.SALE_COUPON.getBizType()) != 0) {
return ResponseUtil.error(ResponseResult.OPERATE_NOT_SUPPORT);
}
BaseResponse<List<String>> baseResponse = this.couponOrderCommomCheck(orderBean);
if (baseResponse.getCode().compareTo(ResponseResult.SUCCESS.getCode()) != 0) {
return baseResponse;
}
// 获取优惠券
List<String> couponCodeList = baseResponse.getResult();
CheckAndCancelRequest request = new CheckAndCancelRequest();
request.setPartnerId(Integer.parseInt(orderBean.getCompanyId()));
request.setMemberId(orderBean.getUserId());
request.setCouponCodeList(couponCodeList);
CouponResponseDTO<CheckAndCancelResponseDTO> responseDTO = couponOnlineClient.checkandcancel(request);
if (responseDTO == null
|| !Objects.equals(responseDTO.getStatusCode(),100)) {
// 直接接口调用失败,
return ResponseUtil.error(ResponseResult.OPERATE_NOT_SUPPORT.getCode(), "操作失败,请稍后重试");
}
CheckAndCancelResponseDTO result = responseDTO.getResult();
// 作废成功
if (result.getResultCode().compareTo(CheckAndCancelResponseDTO.SUCCESS) == 0) {
return ResponseUtil.success();
}
String memo = result.getMemo();
return ResponseUtil.error(ResponseResult.OPERATE_NOT_SUPPORT.getCode(), memo);
}
private BaseResponse<List<String>> couponOrderCommomCheck(OrderBeanV1 orderBean) {
List<OrderSettlementResp> orderSettlementDetailList = orderBean.getOrderSettlementDetailList();
if (CollectionUtils.isEmpty(orderSettlementDetailList)) {
return ResponseUtil.error(ResponseResult.OPERATE_NOT_SUPPORT.getCode(), "没有优惠券信息");
......@@ -3396,10 +3464,13 @@ public class OrderServiceImpl implements Orderservice {
.map(OrderSettlementResp::getExternalObjectId).collect(Collectors.toList());
// fisherman 核销券失败的逻辑处理
return ResponseUtil.success();
if (CollectionUtils.isEmpty(couponCodeList)) {
return ResponseUtil.error(ResponseResult.OPERATE_NOT_SUPPORT.getCode(), "没有优惠券信息");
}
return ResponseUtil.success(couponCodeList);
}
/**
* 订单退款操作
* 1.调用支付 进行退款
......@@ -3408,7 +3479,7 @@ public class OrderServiceImpl implements Orderservice {
* @param orderBean
* @return
*/
private BaseResponse doCouponOrderRefund(OrderBeanV1 orderBean, OrderRefundVo orderRefundVo) {
private void doCouponOrderRefund(OrderBeanV1 orderBean, OrderRefundVo orderRefundVo) {
// 支付金额 大于0 调用支付 进行退款
Long refundId = System.currentTimeMillis();
int state = PayRefundStatus.SUCCESS.getCode();
......@@ -3444,6 +3515,9 @@ public class OrderServiceImpl implements Orderservice {
} else if (Objects.equals(PayRefundStatus.SUCCESS.getCode(), state)) {
//退款成功
cancelOrderRequest.setCreateEvent(AfterSalesOrderCreateEventEnum.REFUND_COMPLETE.getCreateEvent());
}else {
// 退款失败,直接给基础服务null 用于后续补偿操作
cancelOrderRequest.setCreateEvent(null);
}
cancelOrderRequest.setReqRemark(orderRefundVo.getRemarks());
cancelOrderRequest.setRefundDeliveryAmount(false);
......@@ -3457,7 +3531,6 @@ public class OrderServiceImpl implements Orderservice {
}
// 删除订单 通知活动添加商品库存 status 需要老订单的 ordercode
// orderQueueService.backOrdersStatusChange(orderBean.getOrderCode(), orderBean.getOrderState(), orderBean.getPayState());
return ResponseUtil.success();
}
/**
......
......@@ -22,6 +22,8 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
@FeignClient(name = "customer-extend-service", url = "${saas.customerextendclient.feign.url}")
@RequestMapping(produces = {"application/json;charset=UTF-8"})
public interface CustomerExtendClient {
......@@ -39,4 +41,15 @@ public interface CustomerExtendClient {
@LogIgnoreFeign(logMessage="b2bReceiveCard")
@PostMapping(value = "/customerextendservice/qujia/b2breceiveCard")
B2bReceiveCardResponseDto b2bReceiveCard(@RequestBody B2bReceiveCardRequestDto request);
/**
* 校验request里面的券 是否正常
* @param request
* @return 如果和request 返回券一致 表示正常
* 这个接口 无力吐槽
*/
@LogIgnoreFeign(logMessage="getMemberCouponCodes")
@PostMapping(value = "/customerextendservice/coupon/getMemberCouponCodes")
UserBaseResponsDTO<List<String>> getMemberCouponCodes(@RequestBody UserCouponCheckRequest request);
}
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