Commit a9b6da53 by ping.wu

券预校验与锁定新接口对接

parent 739e5ef7
...@@ -33,14 +33,10 @@ import cn.freemud.management.entities.dto.request.order.MCCafeProductRedeemVo; ...@@ -33,14 +33,10 @@ import cn.freemud.management.entities.dto.request.order.MCCafeProductRedeemVo;
import cn.freemud.management.entities.dto.request.order.MCCafeTransactionVo; import cn.freemud.management.entities.dto.request.order.MCCafeTransactionVo;
import cn.freemud.management.entities.dto.response.coupon.McdNetBatchQueryResponse; import cn.freemud.management.entities.dto.response.coupon.McdNetBatchQueryResponse;
import cn.freemud.management.entities.dto.response.coupon.McdNetCouponProductRespDto; import cn.freemud.management.entities.dto.response.coupon.McdNetCouponProductRespDto;
import cn.freemud.management.enums.SettlementTypeEnum;
import cn.freemud.service.mccafe.CouponClientService;
import cn.freemud.utils.BeanUtil; import cn.freemud.utils.BeanUtil;
import cn.freemud.utils.PropertyConvertUtil; import cn.freemud.utils.PropertyConvertUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.couponcenter.offline.domain.ProductRedeemVO; import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.couponcenter.offline.domain.TransactionVO;
import com.freemud.application.sdk.api.couponcenter.offline.request.CouponRequest;
import com.freemud.application.sdk.api.ordercenter.entities.v1.AccountBeanV1; import com.freemud.application.sdk.api.ordercenter.entities.v1.AccountBeanV1;
import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1; import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
import com.freemud.application.sdk.api.ordercenter.entities.v1.ProductBeanV1; import com.freemud.application.sdk.api.ordercenter.entities.v1.ProductBeanV1;
...@@ -49,6 +45,7 @@ import com.freemud.application.sdk.api.ordercenter.enums.BizTypeEnum; ...@@ -49,6 +45,7 @@ import com.freemud.application.sdk.api.ordercenter.enums.BizTypeEnum;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType; import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.enums.OrderSettlementType; import com.freemud.application.sdk.api.ordercenter.enums.OrderSettlementType;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderTypeV1; import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderTypeV1;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettlementResp; import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettlementResp;
import com.freemud.sdk.api.assortment.order.enums.OldOrderAccountType; import com.freemud.sdk.api.assortment.order.enums.OldOrderAccountType;
import com.freemud.sdk.api.assortment.order.enums.QueryOrderAccountType; import com.freemud.sdk.api.assortment.order.enums.QueryOrderAccountType;
...@@ -57,7 +54,6 @@ import com.google.common.collect.Lists; ...@@ -57,7 +54,6 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.math.BigDecimal; import java.math.BigDecimal;
...@@ -886,7 +882,7 @@ public class CouponAdapter { ...@@ -886,7 +882,7 @@ public class CouponAdapter {
return null; return null;
} }
// fisherman begin 筛选订单级别优惠 // fisherman begin 筛选订单级别优惠
List<OrderSettlementResp> couponList = orderBean.getOrderSettlementDetailList().stream().filter(orderSettlement -> List<OrderSettlementResp> orderCouponSettlementList = orderBean.getOrderSettlementDetailList().stream().filter(orderSettlement ->
Objects.equals("0",orderSettlement.getProductId()) && ( Objects.equals("0",orderSettlement.getProductId()) && (
orderSettlement.getSettlementType().equals(OrderSettlementType.CASH_COUPON.getIndex()) orderSettlement.getSettlementType().equals(OrderSettlementType.CASH_COUPON.getIndex())
|| orderSettlement.getSettlementType().equals(OrderSettlementType.PRODUCT_COUPON.getIndex()) || orderSettlement.getSettlementType().equals(OrderSettlementType.PRODUCT_COUPON.getIndex())
...@@ -894,23 +890,16 @@ public class CouponAdapter { ...@@ -894,23 +890,16 @@ public class CouponAdapter {
|| orderSettlement.getSettlementType().equals(OrderSettlementType.FREIGHT_COUPON.getIndex()) || orderSettlement.getSettlementType().equals(OrderSettlementType.FREIGHT_COUPON.getIndex())
) )
).collect(Collectors.toList()); ).collect(Collectors.toList());
if (CollectionUtils.isEmpty(couponList)) { if (CollectionUtils.isEmpty(orderCouponSettlementList)) {
return null; return null;
} }
//fisherman 【01测16灰18全,【华莱士】【疑难专项】一个订单多张优惠券使用场景】 https://www.tapd.cn/43862731/prong/stories/view/1143862731001037477 //fisherman 【01测16灰18全,【华莱士】【疑难专项】一个订单多张优惠券使用场景】 https://www.tapd.cn/43862731/prong/stories/view/1143862731001037477
return this.commonMethodVerificationNew(couponList,orderBean,openId);
}
private PreCheckAndLockReq commonMethodVerificationNew(List<OrderSettlementResp> orderCouponSettlementList,
OrderBeanV1 orderBean,
String openId) {
PreCheckAndLockReq preCheckAndLockReq = new PreCheckAndLockReq(); PreCheckAndLockReq preCheckAndLockReq = new PreCheckAndLockReq();
preCheckAndLockReq.setPartnerId(orderBean.getCompanyId()); preCheckAndLockReq.setPartnerId(orderBean.getCompanyId());
preCheckAndLockReq.setTransId(orderBean.getOid()); preCheckAndLockReq.setTransId(orderBean.getOid());
//优惠券渠道
com.freemud.sdk.api.assortment.order.enums.ActivityChannelEnum activityChannelEnum = orderTypeEnumConvert2ActivityChannel(orderBean.getOrderType(),orderBean.getBizType()); com.freemud.sdk.api.assortment.order.enums.ActivityChannelEnum activityChannelEnum = orderTypeEnumConvert2ActivityChannel(orderBean.getOrderType(),orderBean.getBizType());
preCheckAndLockReq.setRedeemScene(activityChannelEnum.getCode()); preCheckAndLockReq.setRedeemScene(activityChannelEnum.getCode());
preCheckAndLockReq.setAppId(orderBean.getAppId()); preCheckAndLockReq.setAppId(orderBean.getAppId());
...@@ -918,30 +907,25 @@ public class CouponAdapter { ...@@ -918,30 +907,25 @@ public class CouponAdapter {
preCheckAndLockReq.setOrderPaymentAmount(orderBean.getActualPayAmount().intValue()); preCheckAndLockReq.setOrderPaymentAmount(orderBean.getActualPayAmount().intValue());
preCheckAndLockReq.setOpenId(openId); preCheckAndLockReq.setOpenId(openId);
//门店组织机构信息需要掉接口,在外层设置
PreCheckAndLockReq.StoreInfo storeInfo = new PreCheckAndLockReq.StoreInfo(); PreCheckAndLockReq.StoreInfo storeInfo = new PreCheckAndLockReq.StoreInfo();
storeInfo.setStoreId(orderBean.getShopId()); storeInfo.setStoreId(orderBean.getShopId());
storeInfo.setStoreName(orderBean.getShopName()); storeInfo.setStoreName(orderBean.getShopName());
preCheckAndLockReq.setStoreInfo(storeInfo); preCheckAndLockReq.setStoreInfo(storeInfo);
List<PreCheckAndLockReq.CouponInfo> couponInfos = this.getTransactionList(orderCouponSettlementList, orderBean, openId); List<PreCheckAndLockReq.CouponInfo> couponInfos = this.getTransactionList(orderCouponSettlementList, orderBean);
preCheckAndLockReq.setCouponInfoList(couponInfos); preCheckAndLockReq.setCouponInfoList(couponInfos);
// preCheckAndLockReq.setTradeNo();
// if(Objects.equals(OrderClientType.ALIPAY.getIndex().toString(),orderBean.getOrderClient())){
// couponRequest.setChannel(activityChannelEnum.getCode()); if(orderBean.getExtInfo().contains("prepayId")){
// couponRequest.setStation_id("-1"); OrderExtInfoDto orderExtInfoDto = JSONObject.parseObject(orderBean.getExtInfo(), OrderExtInfoDto.class);
// couponRequest.setOperator_id("-1"); preCheckAndLockReq.setTradeNo(orderExtInfoDto.getPrepayId());
// couponRequest.setStore_id(orderBean.getShopId()); }
//// couponRequest.setMemberId(orderBean.getUserId()); }
// couponRequest.setOpenid(openId);
// // 订单号 替换成唯一序号
// couponRequest.setTrans_id(orderBean.getOid());
// couponRequest.setBusiness_date(com.freemud.application.sdk.api.util.DateUtil.convert2String(new Date(), com.freemud.application.sdk.api.util.DateUtil.FORMAT_yyyyMMdd));
// // 配送券逻辑 end
// couponRequest.setTransactions(transactions);
return preCheckAndLockReq; return preCheckAndLockReq;
} }
private com.freemud.sdk.api.assortment.order.enums.ActivityChannelEnum orderTypeEnumConvert2ActivityChannel(Integer orderType, Integer bizType ) { private com.freemud.sdk.api.assortment.order.enums.ActivityChannelEnum orderTypeEnumConvert2ActivityChannel(Integer orderType, Integer bizType ) {
if(Objects.equals(BizTypeEnum.MALL.getBizType(), bizType)){ if(Objects.equals(BizTypeEnum.MALL.getBizType(), bizType)){
return com.freemud.sdk.api.assortment.order.enums.ActivityChannelEnum.saasmall; return com.freemud.sdk.api.assortment.order.enums.ActivityChannelEnum.saasmall;
...@@ -955,63 +939,40 @@ public class CouponAdapter { ...@@ -955,63 +939,40 @@ public class CouponAdapter {
} }
} }
private List<PreCheckAndLockReq.CouponInfo> getTransactionList(List<OrderSettlementResp> orderCouponSettlementList, /**
OrderBeanV1 orderBean, * 组装券信息
String openId) { */
private List<PreCheckAndLockReq.CouponInfo> getTransactionList(List<OrderSettlementResp> orderCouponSettlementList,OrderBeanV1 orderBean) {
List<PreCheckAndLockReq.CouponInfo> couponInfos = new ArrayList<>(); List<PreCheckAndLockReq.CouponInfo> couponInfos = new ArrayList<>();
List<TransactionVO> transactions = new ArrayList<>();
orderCouponSettlementList.forEach(orderSettlement -> { orderCouponSettlementList.forEach(orderSettlement -> {
TransactionVO couponCodeVerificationTransDto = new TransactionVO();
//商品券参数 //商品券参数
// List<PreCheckAndLockReq.ProductInfo> products = new ArrayList<>(); List<PreCheckAndLockReq.ProductInfo> products = null;
List<ProductRedeemVO> products = new ArrayList<>();
if (orderSettlement.getSettlementType().equals(OrderSettlementType.PRODUCT_COUPON.getIndex())) { if (orderSettlement.getSettlementType().equals(OrderSettlementType.PRODUCT_COUPON.getIndex())) {
products = new ArrayList<>();
// List<OrderSettlementResp> couponList = orderBean.getOrderSettlementDetailList().stream().filter(productSettlement -> List<OrderSettlementResp> couponProductList = orderBean.getOrderSettlementDetailList().stream().filter(productSettlement ->
// !Objects.equals("0",orderSettlement.getProductId()) && orderSettlement.getSettlementType().equals(OrderSettlementType.PRODUCT_COUPON.getIndex()) !Objects.equals("0",productSettlement.getProductId())
// ).collect(Collectors.toList()); && Objects.equals(orderSettlement.getExternalObjectId(),productSettlement.getExternalObjectId())
// && OrderSettlementType.PRODUCT_COUPON.getIndex().equals(productSettlement.getSettlementType())
// for (OrderSettlementResp settlementResp : couponList){ ).collect(Collectors.toList());
// PreCheckAndLockReq.ProductInfo productInfo = new PreCheckAndLockReq.ProductInfo();
// productInfo.setProductId(settlementResp.getProductId()); for (OrderSettlementResp couponProduct : couponProductList){
// PreCheckAndLockReq.ProductInfo productInfo = new PreCheckAndLockReq.ProductInfo();
// products.add(productInfo); productInfo.setProductId(couponProduct.getProductId());
// } //商品名称 原价从订单商品获取
productInfo.setQty(couponProduct.getNumber());
List<AccountBeanV1> accountBeans = orderBean.getAccountList(); productInfo.setCouponDiscountTotalAmount(Math.abs(couponProduct.getSettlementAmount().intValue()));
AccountBeanV1 accountBean = accountBeans.get(0); products.add(productInfo);
for (int i = 0; i < orderBean.getProductList().size(); i++) {
ProductBeanV1 productBean = orderBean.getProductList().get(i);
String pid = StringUtils.isNotBlank(productBean.getSpecification()) ? productBean.getSpecification() : productBean.getProductId();
if (!org.springframework.util.CollectionUtils.isEmpty(orderBean.getProductList().get(i).getDiscountList())) {
List<ProductDiscountV1> discounts = orderBean.getProductList().get(i).getDiscountList().stream().
filter(productDiscount -> productDiscount.getDiscountId().equals(accountBean.getAccountId())).collect(Collectors.toList());
for (ProductDiscountV1 productDiscount : discounts) {
if (productDiscount.getDiscountType() == null || productDiscount.getDiscountType() == 0) {
continue;
}
ProductRedeemVO couponCodeVerificationProductDto = new ProductRedeemVO();
couponCodeVerificationProductDto.setPid(pid);
couponCodeVerificationProductDto.setConsume_num(productDiscount.getDiscountQty());
couponCodeVerificationProductDto.setSeq(i + 1);
couponCodeVerificationProductDto.setRedeem_price(new BigDecimal(productBean.getPrice()));
products.add(couponCodeVerificationProductDto);
}
}
} }
} }
couponCodeVerificationTransDto.setCode(orderSettlement.getExternalObjectId()); PreCheckAndLockReq.CouponInfo couponInfo = new PreCheckAndLockReq.CouponInfo();
couponCodeVerificationTransDto.setOpenId(openId); couponInfo.setCode(orderSettlement.getExternalObjectId());
Long discountPrice = orderSettlement.getSettlementAmount().longValue(); couponInfo.setDiscountAmount(Math.abs(orderSettlement.getSettlementAmount().intValue()));
couponCodeVerificationTransDto.setTotalAmount(Math.abs(discountPrice));
if (CollectionUtils.isNotEmpty(products)) { if (CollectionUtils.isNotEmpty(products)) {
couponCodeVerificationTransDto.setProducts(products); couponInfo.setProductList(products);
} }
transactions.add(couponCodeVerificationTransDto); couponInfos.add(couponInfo);
}); });
return couponInfos; return couponInfos;
} }
......
...@@ -34,7 +34,6 @@ public class PreCheckAndLockReq { ...@@ -34,7 +34,6 @@ public class PreCheckAndLockReq {
@ApiModelProperty(value = "券信息列表", required = true) @ApiModelProperty(value = "券信息列表", required = true)
private List<CouponInfo> couponInfoList; private List<CouponInfo> couponInfoList;
@ApiModelProperty(value = "用户微信openid") @ApiModelProperty(value = "用户微信openid")
private String openId; private String openId;
......
...@@ -323,7 +323,8 @@ public class OrderBusinessServiceImpl implements OrderBusinessService { ...@@ -323,7 +323,8 @@ public class OrderBusinessServiceImpl implements OrderBusinessService {
PreCheckAndLockReq request = couponAdapter.convert2PreCheckRequest(orderBean, openId); PreCheckAndLockReq request = couponAdapter.convert2PreCheckRequest(orderBean, openId);
if (request != null) { if (request != null) {
// request.setChannel_ids(getOrgCodes(orderBean.getCompanyId(),orderBean.getShopId())); // request.setChannel_ids(getOrgCodes(orderBean.getCompanyId(),orderBean.getShopId()));
BaseResponse<CouponLockResponse> couponLockResponseBaseResponse = offlineCouponSdkService.preCheckAndLock(request); request.getStoreInfo().setChannelIdList(getOrgCodes(orderBean.getCompanyId(),orderBean.getShopId()));
BaseResponse couponLockResponseBaseResponse = offlineCouponSdkService.preCheckAndLock(request);
if (!ObjectUtils.equals(RESPONSE_SUCCESS_STR, couponLockResponseBaseResponse.getCode())) { if (!ObjectUtils.equals(RESPONSE_SUCCESS_STR, couponLockResponseBaseResponse.getCode())) {
CancelOrderRequest cancelOrderRequest = orderSdkAdapter.convent2CancelOrderRequest(orderBean.getOid(), orderBean.getCompanyId(), AfterSalesType.SYSTEM_CANCEL, "锁定券码失败", "", null); CancelOrderRequest cancelOrderRequest = orderSdkAdapter.convent2CancelOrderRequest(orderBean.getOid(), orderBean.getCompanyId(), AfterSalesType.SYSTEM_CANCEL, "锁定券码失败", "", null);
orderCancel(cancelOrderRequest); orderCancel(cancelOrderRequest);
......
...@@ -18,7 +18,10 @@ public interface CouponOfflineClient { ...@@ -18,7 +18,10 @@ public interface CouponOfflineClient {
@PostMapping("/api") @PostMapping("/api")
CouponCodeResponseDto verification(CouponCodeVerificationDto couponCodeVerificationDto); CouponCodeResponseDto verification(CouponCodeVerificationDto couponCodeVerificationDto);
/**
* 预校验锁定券新接口
*/
@LogIgnoreFeign(logMessage="precheckAndLock",messageFieldName= ResponseCodeKeyConstant.MSG,statusCodeFieldName=ResponseCodeKeyConstant.STATUS_CODE) @LogIgnoreFeign(logMessage="precheckAndLock",messageFieldName= ResponseCodeKeyConstant.MSG,statusCodeFieldName=ResponseCodeKeyConstant.STATUS_CODE)
@PostMapping("/precheck/redeem") @PostMapping("/standard/checkandlock")
BaseResponse<CouponLockResponse> preCheckAndLock(PreCheckAndLockReq couponCodeVerificationDto); BaseResponse preCheckAndLock(PreCheckAndLockReq couponCodeVerificationDto);
} }
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