Commit 3e18580c by 胡敬轩

Merge remote-tracking branch 'remotes/origin/feature/Ka2.0.76-0427-0504-多卡支付'

parents f4a1a80f 18abe8a8
package com.freemud.sdk.api.assortment.order.request.payment;
import lombok.Data;
import java.util.List;
@Data
public class MultiPayRequest {
private List<PayPlatformVO> platforms;
/**
* 用户标识
*/
private String open_id;
/**
* 回调通知地址
*/
private String notify_url;
/**
* 是否需要开发票:1为需要
*/
private Integer invoice_flag;
/**
* 支付总金额,以分为单位
*/
private Long amount;
/**
* 会员支付金额,以分为单位
*/
private Long vip_amount;
/**
* 不可打折金额,以分为单位
*/
private Integer undis_amount;
/**
* 订单描述
*/
private String body;
/**
* 外部交易流水号,由上游系统生成,需保证唯一
*/
private String out_order_no;
private List<ProductVO> products;
private String goodsTag;
/**
* 商户编号(由非码提供)
*/
private String partner_id;
/**
* 商家门店号(在线支付需要提前定义)
*/
private String store_id;
/**
* 业务日期
*/
private String business_date;
/**
* 营业员编号(可以使用固定值)
*/
private String operator_id = "1";
/**
* 商家POS机编号(可以使用固定值,扫码付必传)
*/
private String station_id = "1";;
private String appId;
private String payCode;
private String payTimeOutTime;
private String ebCode;
private Boolean disable_service_goods_tag = false;
private String request_source ="V1";
private String ver ="10";
private String storeName;
private Long merchantDiscount;
/**
* @see com.freemud
* 下单所用小程序类型:1微信,2支付宝,3抖音")
*/
private Integer applicationType;
//储值卡支付列表
private List<String> cardItems;
}
...@@ -77,6 +77,7 @@ import com.freemud.sdk.api.assortment.order.entities.promption.SubtractStockVO; ...@@ -77,6 +77,7 @@ import com.freemud.sdk.api.assortment.order.entities.promption.SubtractStockVO;
import com.freemud.sdk.api.assortment.order.enums.*; import com.freemud.sdk.api.assortment.order.enums.*;
import com.freemud.sdk.api.assortment.order.request.order.*; import com.freemud.sdk.api.assortment.order.request.order.*;
import com.freemud.sdk.api.assortment.order.request.payment.CombPayRequest; import com.freemud.sdk.api.assortment.order.request.payment.CombPayRequest;
import com.freemud.sdk.api.assortment.order.request.payment.MultiPayRequest;
import com.freemud.sdk.api.assortment.order.request.payment.PayPlatformVO; import com.freemud.sdk.api.assortment.order.request.payment.PayPlatformVO;
import com.freemud.sdk.api.assortment.order.request.payment.ProductVO; import com.freemud.sdk.api.assortment.order.request.payment.ProductVO;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrderByIdResponse; import com.freemud.sdk.api.assortment.order.response.order.QueryOrderByIdResponse;
...@@ -3358,6 +3359,7 @@ public class OrderAdapter { ...@@ -3358,6 +3359,7 @@ public class OrderAdapter {
requestDto.setOpenId( userLoginInfoDto.getOpenId()); requestDto.setOpenId( userLoginInfoDto.getOpenId());
requestDto.setFaceCode(createOrderVo.getFaceCode()); requestDto.setFaceCode(createOrderVo.getFaceCode());
requestDto.setCardCode(createOrderVo.getCardCode()); requestDto.setCardCode(createOrderVo.getCardCode());
requestDto.setCardCodes(createOrderVo.getCardCodes());
requestDto.setPayCode(null); requestDto.setPayCode(null);
requestDto.setFatherOrderBean(createOrderOperateDto.getFatherOrderBean()); requestDto.setFatherOrderBean(createOrderOperateDto.getFatherOrderBean());
requestDto.setProductOrderBean(createOrderOperateDto.getProductOrderBean()); requestDto.setProductOrderBean(createOrderOperateDto.getProductOrderBean());
...@@ -3942,7 +3944,7 @@ public class OrderAdapter { ...@@ -3942,7 +3944,7 @@ public class OrderAdapter {
orderExtInfoDto.setPackageAmountCollectType(shoppingCartGoodsDto.getPackageAmountCollectType()); orderExtInfoDto.setPackageAmountCollectType(shoppingCartGoodsDto.getPackageAmountCollectType());
} }
orderExtInfoDto.setUnDistribution(createOrderVo.getUnDistribution()); // orderExtInfoDto.setUnDistribution(createOrderVo.getUnDistribution());
return orderExtInfoDto; return orderExtInfoDto;
} }
...@@ -4031,4 +4033,63 @@ public class OrderAdapter { ...@@ -4031,4 +4033,63 @@ public class OrderAdapter {
return payItems; return payItems;
} }
public MultiPayRequest convent2MultiPayOrderRequest(List<String> cardCodes
, OrderBeanV1 orderBean
, PaymentRequest paymentRequest
, String partnerPayOvertime
, String orderClient
, String channel
, Integer totalAmount) {
MultiPayRequest orderPayDto = new MultiPayRequest();
orderPayDto.setEbCode(paymentRequest.getPayCode());
orderPayDto.setPartner_id(orderBean.getCompanyId());
orderPayDto.setBody(paymentRequest.getPrincipalName());
orderPayDto.setNotify_url(paymentRequest.getReverseNotifyiDcUrl());
orderPayDto.setStore_id(orderBean.getShopId());
orderPayDto.setOpen_id(paymentRequest.getOpenId());
String businessDate = com.freemud.application.sdk.api.util.DateUtil.convert2String(new Date(), "yyyyMMdd");
orderPayDto.setBusiness_date(businessDate);
orderPayDto.setAmount(totalAmount.longValue());
orderPayDto.setVip_amount(0L);
orderPayDto.setAppId(paymentRequest.getWxAppId());
orderPayDto.setPayCode(paymentRequest.getPayCode());
orderPayDto.setVer("V1");
orderPayDto.setStoreName(orderBean.getShopName());
orderPayDto.setPayTimeOutTime(StringUtils.defaultIfBlank(partnerPayOvertime, "30"));
List<ProductVO> productVOS = new ArrayList<ProductVO>();
if (CollectionUtils.isNotEmpty(orderBean.getProductList())) {
for (ProductBeanV1 product : orderBean.getProductList()) {
ProductVO productBean = new ProductVO();
productBean.setId(product.getProductId());
productBean.setQuantity(product.getNumber());
productBean.setSeq(product.getSequence());
productBean.setSalesType("NORMAL");
productBean.setPrice(product.getPrice());
productBean.setName(product.getProductName());
productVOS.add(productBean);
}
}
orderPayDto.setMerchantDiscount(orderBean.getOriginalAmount().longValue() - orderBean.getAmount());
orderPayDto.setProducts(productVOS);
List<PayPlatformVO> platforms = new ArrayList<>();
PayPlatformVO payPlatformVO = new PayPlatformVO();
payPlatformVO.setClientCode(PayChannelType.SVC.getEbcode());
payPlatformVO.setEbcode(PayChannelType.SVC.getEbcode());
payPlatformVO.setAmount(0L);
platforms.add(payPlatformVO);
String ebcode = PayChannelType.getByIndex(Byte.parseByte(channel)).getEbcode();
payPlatformVO = new PayPlatformVO();
payPlatformVO.setAmount(0L);
payPlatformVO.setClientCode(orderClient);
payPlatformVO.setEbcode(ebcode);
platforms.add(payPlatformVO);
orderPayDto.setPlatforms(platforms);
orderPayDto.setOut_order_no(orderBean.getOid());
orderPayDto.setCardItems(cardCodes);//多卡支付
orderPayDto.setApplicationType(getPayApplicationType(orderBean.getOrderClient()));
return orderPayDto;
}
} }
...@@ -7,6 +7,8 @@ import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType; ...@@ -7,6 +7,8 @@ import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto; import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import lombok.Data; import lombok.Data;
import java.util.List;
@Data @Data
public class CreatePrepayRequestDto { public class CreatePrepayRequestDto {
/** /**
...@@ -26,9 +28,15 @@ public class CreatePrepayRequestDto { ...@@ -26,9 +28,15 @@ public class CreatePrepayRequestDto {
*/ */
private String faceCode; private String faceCode;
/** /**
* 会员卡code * 会员卡code 储值卡
*/ */
private String cardCode; private String cardCode;
/**
* 储值卡
*/
private List<String> cardCodes;
/** /**
* 支付渠道码 * 支付渠道码
*/ */
......
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: OrderPayResponseDto
* @Package cn.freemud.entities.dto
* @Description:
* @author: liming.guo
* @date: 2018/5/25 17:10
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.entities.dto.pay;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.util.List;
@NoArgsConstructor
@Data
@ToString
public class MultiPayResponse {
private int code;
@ApiModelProperty(value = "提示信息")
private String msg;
private PayPlatforms data;
@Data
public static class PayPlatforms {
private List<PayPlatform> payPlatformResponseList;
}
@Data
static public class PayPlatform {
@ApiModelProperty(value = "app_id编号(微信使用)")
private String appId;
@ApiModelProperty(value = "支付渠道编号")
private String ebCode;
@ApiModelProperty(value = "非码交易流水号")
private String fmTradeNo;
@ApiModelProperty(value = "随机字符串(微信使用)")
private String nonceStr;
@ApiModelProperty(value = "外部交易流水号,由上游系统生成,需保证唯一")
private String outOrderNo;
@ApiModelProperty(value = "第三方支付交易序号")
private String platformTradeNo;
@ApiModelProperty(value = "支付金额")
private Integer payAmount;
@ApiModelProperty(value = "间联单号")
private String transId;
//商户单号
private String endTransTradeNo;
//储值卡类型:0一次性卡(礼品卡),3重复使用卡(储值卡)")
private Integer cardType;
@ApiModelProperty(value = "")
private PayOrderBean payOrder;
//卡号 多卡支付multiPay接口返回
private String cardCode;
@Data
public static class PayOrderBean {
/**
* appid : wx3ab08e23966343fe
* package : prepay_id=wx25143630149413bcd9fbad100070370076
* nonce_str : -610630281
* sign : D320B2B74D858EBE16841F43AE70E757
* timestamp : 1527230190
* signType : MD5
*/
private String appId;
@JsonProperty("package")
private String packageX;
//@JsonProperty("nonce_str")
private String nonceStr;
/**
* 支付签名
*/
private String paySign;
private String timeStamp;
/**
* 加密方式
*/
private String signType;
private String aliPayOrder;
}
}
}
...@@ -290,7 +290,7 @@ public class CreateOrderVo { ...@@ -290,7 +290,7 @@ public class CreateOrderVo {
* *
* 1 表示不分账 ,其他情况 不传值 给基础服务 * 1 表示不分账 ,其他情况 不传值 给基础服务
*/ */
private Integer unDistribution; // private Integer unDistribution;
/** /**
* 是否使用电子风味卡,如果不为空则为使用 * 是否使用电子风味卡,如果不为空则为使用
......
...@@ -64,7 +64,7 @@ public class SellCouponCreateOrderVo { ...@@ -64,7 +64,7 @@ public class SellCouponCreateOrderVo {
* <p> * <p>
* 1 表示不分账 ,其他情况 不传值 给基础服务 * 1 表示不分账 ,其他情况 不传值 给基础服务
*/ */
private Integer unDistribution; // private Integer unDistribution;
/** /**
......
...@@ -190,13 +190,13 @@ public class CheckOrder { ...@@ -190,13 +190,13 @@ public class CheckOrder {
} }
//校验会员svc卡信息 //校验会员svc卡信息
List<GetSvcInfoByMemberIdResponseVo> memberCardCode = checkCardCode(createOrderVo.getPartnerId(), userLoginInfoDto.getMemberId(), cardCodes); List<GetSvcInfoByMemberIdResponseVo> memberCardCode = checkCardCode(createOrderVo.getPartnerId(), userLoginInfoDto.getMemberId(), cardCodes);
if (CollectionUtils.isNotEmpty(memberCardCode)) { // if (CollectionUtils.isNotEmpty(memberCardCode)) {
// 【华莱士】【订单C端记录不分账的卡面编号】不让走分账,卡面编号--11840,11845,11846,11853,11854,11855,11857,11858,11859,11860,11861,11862,11863,11864,11865,11866,11906 // // 【华莱士】【订单C端记录不分账的卡面编号】不让走分账,卡面编号--11840,11845,11846,11853,11854,11855,11857,11858,11859,11860,11861,11862,11863,11864,11865,11866,11906
long count = memberCardCode.stream().filter(card -> cardCodes.contains(card.getCardCode()) && unDistributions.contains(card.getApplyId())).count(); // long count = memberCardCode.stream().filter(card -> cardCodes.contains(card.getCardCode()) && unDistributions.contains(card.getApplyId())).count();
if (count > 0) { // if (count > 0) {
createOrderVo.setUnDistribution(1); // createOrderVo.setUnDistribution(1);
} // }
} // }
createOrderVo.setUserId(userLoginInfoDto.getMemberId()); createOrderVo.setUserId(userLoginInfoDto.getMemberId());
return userLoginInfoDto; return userLoginInfoDto;
} }
...@@ -205,13 +205,13 @@ public class CheckOrder { ...@@ -205,13 +205,13 @@ public class CheckOrder {
if (StringUtils.isNotBlank(requestVo.getCardCode())) { if (StringUtils.isNotBlank(requestVo.getCardCode())) {
//校验会员svc卡信息 //校验会员svc卡信息
List<GetSvcInfoByMemberIdResponseVo> memberCardCode = checkCardCode(partnerId, memberId, Sets.newHashSet(requestVo.getCardCode())); List<GetSvcInfoByMemberIdResponseVo> memberCardCode = checkCardCode(partnerId, memberId, Sets.newHashSet(requestVo.getCardCode()));
if (CollectionUtils.isNotEmpty(memberCardCode)) { // if (CollectionUtils.isNotEmpty(memberCardCode)) {
// 【华莱士】【订单C端记录不分账的卡面编号】不让走分账,卡面编号--11840,11845,11846,11853,11854,11855,11857,11858,11859,11860,11861,11862,11863,11864,11865,11866,11906 // // 【华莱士】【订单C端记录不分账的卡面编号】不让走分账,卡面编号--11840,11845,11846,11853,11854,11855,11857,11858,11859,11860,11861,11862,11863,11864,11865,11866,11906
long count = memberCardCode.stream().filter(card -> Sets.newHashSet(requestVo.getCardCode()).contains(card.getCardCode()) && unDistributions.contains(card.getApplyId())).count(); // long count = memberCardCode.stream().filter(card -> Sets.newHashSet(requestVo.getCardCode()).contains(card.getCardCode()) && unDistributions.contains(card.getApplyId())).count();
if (count > 0) { // if (count > 0) {
requestVo.setUnDistribution(1); // requestVo.setUnDistribution(1);
} // }
} // }
} }
} }
...@@ -1252,20 +1252,12 @@ public class CheckOrder { ...@@ -1252,20 +1252,12 @@ public class CheckOrder {
|| responseDTO.getData().size() == 0) { || responseDTO.getData().size() == 0) {
throw new ServiceException(ResponseResult.USER_SVC_CARD_ERROR); throw new ServiceException(ResponseResult.USER_SVC_CARD_ERROR);
} }
//svc卡无效 List<GetSvcInfoByMemberIdResponseVo> memberDatas = responseDTO.getData().stream().filter(data -> data.getStatusFlag() == 0).collect(Collectors.toList());
boolean b = true; Set<String> memberCardCodes = memberDatas.stream().map(GetSvcInfoByMemberIdResponseVo :: getCardCode).collect(Collectors.toSet());
for (GetSvcInfoByMemberIdResponseVo getSvcInfoByMemberIdResponse : responseDTO.getData()) { if(!memberCardCodes.containsAll(cardCodes)){
for (String cardCode : cardCodes){
if (cardCode.equals(getSvcInfoByMemberIdResponse.getCardCode()) && getSvcInfoByMemberIdResponse.getStatusFlag() == 0) {
b = false;
break;
}
}
}
if (b) {
throw new ServiceException(ResponseResult.USER_SVC_CARD_ERROR); throw new ServiceException(ResponseResult.USER_SVC_CARD_ERROR);
} }
return responseDTO.getData(); return memberDatas;
} }
public void checkOrderByStore(StoreResponseDto storeResponseDto) { public void checkOrderByStore(StoreResponseDto storeResponseDto) {
......
...@@ -393,40 +393,6 @@ public class OrderServiceImpl implements Orderservice { ...@@ -393,40 +393,6 @@ public class OrderServiceImpl implements Orderservice {
if (!PayStatus.NOT_PAY.getCode().equals(orderBean.getPayStatus()) || !NewOrderStatus.PENDING_PAYMENT.getIndex().equals(orderBean.getStatusV2())) { if (!PayStatus.NOT_PAY.getCode().equals(orderBean.getPayStatus()) || !NewOrderStatus.PENDING_PAYMENT.getIndex().equals(orderBean.getStatusV2())) {
return sendPaySuccessNoticeMessage(); return sendPaySuccessNoticeMessage();
} }
//若该订单使用了优惠券,则移除卡包,移除失败也不退款,现在支付成功个调用核销,无需调用此功能
// couponActivityService.callbackNotify(orderBean);
try {
//美团POS需求,混合支付(现金+储值卡)时,储值卡的交易流水号在预支付时是没有的,导致订单里没有储值卡的流水号,这里查一下支付信息,将储值卡的流水号信息更新到订单信息里
List<OrderPayItemResp> payItem = orderBean.getOrderPayItem();
if (CollectionUtils.isNotEmpty(payItem) && payItem.size() > 1) {
MultiQueryRequest queryPay = new MultiQueryRequest();
queryPay.setPartnerId(Integer.valueOf(partnerId));
queryPay.setStoreId(storeId);
queryPay.setOutOrderNo(orderBean.getOid());
MultiQueryRespDto payResponse = comPayClient.paymentApplicationQuery(queryPay, Integer.valueOf(partnerId));
if (null != payResponse && null != payResponse.getData() && CollectionUtils.isNotEmpty(payResponse.getData().getQueryList())) {
List<MultiPaymentRespDto> payList = payResponse.getData().getQueryList();
// 和订单里的匹配
payList.forEach(pay -> {
payItem.forEach(item -> {
if (item.getTransId().equals(pay.getTransId())) {
item.setFmTradeNo(pay.getFmTradeNo());
item.setOutOrderNo(pay.getOutOrderNo());
}
});
});
// 更新订单信息
OrderEditRequest editReq = new OrderEditRequest(orderBean.getOid(), orderBean.getExtInfo(), orderBean.getCompanyId());
editReq.setPayChannel(PayChannelType.COMB.getEbcode());
editReq.setPayChannelName(PayChannelType.COMB.getName());
editReq.setPayChannelType(PayChannelType.COMB.getIndex());
editReq.setOrderPayItem(payItem);
orderCenterSdkService.orderEdit(editReq);
}
}
} catch (Exception ignored) {
} //这个异常catch住,不影响业务流程
String takeCode; String takeCode;
String daySeq; String daySeq;
...@@ -2546,6 +2512,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2546,6 +2512,7 @@ public class OrderServiceImpl implements Orderservice {
private void preSetPayChannelType(BaseCreateOrderRequest request, CreateOrderVo createOrderVo) { private void preSetPayChannelType(BaseCreateOrderRequest request, CreateOrderVo createOrderVo) {
Long amount = request.getAmount(); Long amount = request.getAmount();
String cardCode = createOrderVo.getCardCode(); String cardCode = createOrderVo.getCardCode();
List<String> cardCodes = createOrderVo.getCardCodes();
CreateOrderUnionPayCardVo unionPayCard = createOrderVo.getUnionPayCard(); CreateOrderUnionPayCardVo unionPayCard = createOrderVo.getUnionPayCard();
if (amount > 0) { if (amount > 0) {
PayChannelType channelType = null; PayChannelType channelType = null;
...@@ -2553,7 +2520,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2553,7 +2520,7 @@ public class OrderServiceImpl implements Orderservice {
if (Objects.nonNull(unionPayCard)) { if (Objects.nonNull(unionPayCard)) {
channelType = PayChannelType.USVCP; channelType = PayChannelType.USVCP;
this.setPrePayChannel(request, channelType); this.setPrePayChannel(request, channelType);
} else if (StringUtils.isNotBlank(cardCode)) { } else if (StringUtils.isNotBlank(cardCode) || CollectionUtils.isNotEmpty(cardCodes)) {
// 储值卡支付 // 储值卡支付
channelType = PayChannelType.SVC; channelType = PayChannelType.SVC;
this.setPrePayChannel(request, channelType); this.setPrePayChannel(request, channelType);
...@@ -2632,7 +2599,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2632,7 +2599,7 @@ public class OrderServiceImpl implements Orderservice {
orderExtInfoDto.setPackageAmountCollectType(shoppingCartGoodsDto.getPackageAmountCollectType()); orderExtInfoDto.setPackageAmountCollectType(shoppingCartGoodsDto.getPackageAmountCollectType());
} }
orderExtInfoDto.setUnDistribution(createOrderVo.getUnDistribution()); // orderExtInfoDto.setUnDistribution(createOrderVo.getUnDistribution());
return orderExtInfoDto; return orderExtInfoDto;
} }
......
...@@ -66,6 +66,7 @@ import com.freemud.sdk.api.assortment.order.request.order.MultiOrderRefundReques ...@@ -66,6 +66,7 @@ import com.freemud.sdk.api.assortment.order.request.order.MultiOrderRefundReques
import com.freemud.sdk.api.assortment.order.request.order.OrderEditRequest; import com.freemud.sdk.api.assortment.order.request.order.OrderEditRequest;
import com.freemud.sdk.api.assortment.order.request.order.PaymentRequest; import com.freemud.sdk.api.assortment.order.request.order.PaymentRequest;
import com.freemud.sdk.api.assortment.order.request.payment.CombPayRequest; import com.freemud.sdk.api.assortment.order.request.payment.CombPayRequest;
import com.freemud.sdk.api.assortment.order.request.payment.MultiPayRequest;
import com.freemud.sdk.api.assortment.order.response.order.MultiOrderRefundResponse; import com.freemud.sdk.api.assortment.order.response.order.MultiOrderRefundResponse;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
...@@ -161,7 +162,13 @@ public class PayServiceImpl { ...@@ -161,7 +162,13 @@ public class PayServiceImpl {
PaymentRequest paymentRequest = orderBodyConvertToPaymentBody(createPrepayRequestDto.getOpenId(), createPrepayRequestDto.getPartnerId(), PaymentRequest paymentRequest = orderBodyConvertToPaymentBody(createPrepayRequestDto.getOpenId(), createPrepayRequestDto.getPartnerId(),
createPrepayRequestDto.getWxAppId(), createPrepayRequestDto.getPayCode()); createPrepayRequestDto.getWxAppId(), createPrepayRequestDto.getPayCode());
long totalAmount = createPrepayRequestDto.getTotalAmount(); long totalAmount = createPrepayRequestDto.getTotalAmount();
String cardCode = createPrepayRequestDto.getCardCode(); // String cardCode = createPrepayRequestDto.getCardCode();
List<String> cardCodes = new ArrayList<>();
if(CollectionUtils.isNotEmpty(createPrepayRequestDto.getCardCodes())){
cardCodes = createPrepayRequestDto.getCardCodes();
}else if(StringUtils.isNotBlank(createPrepayRequestDto.getCardCode())){
cardCodes.add(createPrepayRequestDto.getCardCode());
}
String transId = createPrepayRequestDto.getTransId(); String transId = createPrepayRequestDto.getTransId();
if (totalAmount < 0) { if (totalAmount < 0) {
throw new ServiceException(ResponseResult.PAY_AMOUNT_ERROR); throw new ServiceException(ResponseResult.PAY_AMOUNT_ERROR);
...@@ -171,13 +178,15 @@ public class PayServiceImpl { ...@@ -171,13 +178,15 @@ public class PayServiceImpl {
// } else if (totalAmount > 0 && StringUtils.isNotBlank(createPrepayRequestDto.getFaceCode())) { // } else if (totalAmount > 0 && StringUtils.isNotBlank(createPrepayRequestDto.getFaceCode())) {
//扫脸支付 //扫脸支付
// orderPayResponse = facePay(createPrepayRequestDto.getFaceCode(), createPrepayRequestDto.getProductOrderBean(), paymentRequest, LogThreadLocal.getTrackingNo()); // orderPayResponse = facePay(createPrepayRequestDto.getFaceCode(), createPrepayRequestDto.getProductOrderBean(), paymentRequest, LogThreadLocal.getTrackingNo());
} else if (totalAmount > 0 && StringUtils.isBlank(cardCode)) { } else if (totalAmount > 0 && CollectionUtils.isEmpty(cardCodes)) {
//现金线上支付 //现金线上支付
// String partnerPayOvertime = this.getPartnerPayOvertime(createPrepayRequestDto.getPartnerId()); // String partnerPayOvertime = this.getPartnerPayOvertime(createPrepayRequestDto.getPartnerId());
orderPayResponse = getPreOrderPay(createPrepayRequestDto.getFatherOrderBean(), paymentRequest, createPrepayRequestDto.getCardAmount(), transId, createPrepayRequestDto.getOrderExtInfoDTO()); orderPayResponse = getPreOrderPay(createPrepayRequestDto.getFatherOrderBean(), paymentRequest, createPrepayRequestDto.getCardAmount(), transId, createPrepayRequestDto.getOrderExtInfoDTO());
} else if (totalAmount > 0 && StringUtils.isNotBlank(cardCode)) { } else if (totalAmount > 0 && CollectionUtils.isNotEmpty(cardCodes)) {
//混合支付+svc卡(礼品卡) //混合支付+svc卡(礼品卡)
orderPayResponse = switchSvcOrComb(totalAmount, cardCode, createPrepayRequestDto.getFatherOrderBean(), paymentRequest, transId, createPrepayRequestDto.getChannel()); // orderPayResponse = switchSvcOrComb(totalAmount, cardCode, createPrepayRequestDto.getFatherOrderBean(), paymentRequest, transId, createPrepayRequestDto.getChannel());
//多卡混合支付
orderPayResponse = multiPay(cardCodes, createPrepayRequestDto.getFatherOrderBean(), paymentRequest, (int)totalAmount, createPrepayRequestDto.getChannel());
} else { } else {
// 0元订单如果不需要支付,自定义支付单号 // 0元订单如果不需要支付,自定义支付单号
orderPayResponse = getOrderPayResponse(paymentRequest, createPrepayRequestDto.getFatherOrderBean()); orderPayResponse = getOrderPayResponse(paymentRequest, createPrepayRequestDto.getFatherOrderBean());
...@@ -187,7 +196,7 @@ public class PayServiceImpl { ...@@ -187,7 +196,7 @@ public class PayServiceImpl {
} }
} }
if (orderPayResponse == null || Objects.isNull(orderPayResponse.getFmId())) { if (orderPayResponse == null || Objects.isNull(orderPayResponse.getFmId())) {
BaseResponse baseResponse = failPreOrderPay(LogThreadLocal.getTrackingNo(), createPrepayRequestDto.getProductOrderBean(), cardCode, createPrepayRequestDto.getOrderClient(), BaseResponse baseResponse = failPreOrderPay(LogThreadLocal.getTrackingNo(), createPrepayRequestDto.getProductOrderBean(), cardCodes, createPrepayRequestDto.getOrderClient(),
Objects.isNull(orderPayResponse) ? null : orderPayResponse.getMsg()); Objects.isNull(orderPayResponse) ? null : orderPayResponse.getMsg());
// 电子风味卡需要给用户特殊的返回 // 电子风味卡需要给用户特殊的返回
if (totalAmount > 0 && Objects.nonNull(createPrepayRequestDto.getUnionPayCard())) { if (totalAmount > 0 && Objects.nonNull(createPrepayRequestDto.getUnionPayCard())) {
...@@ -199,22 +208,22 @@ public class PayServiceImpl { ...@@ -199,22 +208,22 @@ public class PayServiceImpl {
throw new ServiceException(baseResponse.getCode(), baseResponse.getMessage()); throw new ServiceException(baseResponse.getCode(), baseResponse.getMessage());
} }
createOrderResponse = orderAdapter.convent2CreateFatherSonOrderResponseVo(orderPayResponse, createPrepayRequestDto.getProductOrderBean()); createOrderResponse = orderAdapter.convent2CreateFatherSonOrderResponseVo(orderPayResponse, createPrepayRequestDto.getProductOrderBean());
//更新订单支付信息 //更新订单支付信息 多卡支付有多个卡号,不用拓展字段了
if (StringUtils.isNotBlank(cardCode)) { // if (StringUtils.isNotBlank(cardCode)) {
if (Objects.nonNull(createPrepayRequestDto.getOrderExtInfoDTO())) { // if (Objects.nonNull(createPrepayRequestDto.getOrderExtInfoDTO())) {
createPrepayRequestDto.getOrderExtInfoDTO().setCardCode(cardCode); // createPrepayRequestDto.getOrderExtInfoDTO().setCardCode(cardCode);
}else { // }else {
OrderExtInfoDto dto = new OrderExtInfoDto(); // OrderExtInfoDto dto = new OrderExtInfoDto();
dto.setCardCode(cardCode); // dto.setCardCode(cardCode);
createPrepayRequestDto.setOrderExtInfoDTO(dto); // createPrepayRequestDto.setOrderExtInfoDTO(dto);
} // }
} // }
BaseResponse baseEditResponse = this.updateOrderInfo(orderPayResponse, createPrepayRequestDto.getOrderExtInfoDTO(), createPrepayRequestDto.getProductOrderBean(), LogThreadLocal.getTrackingNo()); BaseResponse baseEditResponse = this.updateOrderInfo(orderPayResponse, createPrepayRequestDto.getOrderExtInfoDTO(), createPrepayRequestDto.getProductOrderBean(), LogThreadLocal.getTrackingNo());
if (baseEditResponse != null) { if (baseEditResponse != null) {
throw new ServiceException(baseEditResponse.getCode(), baseEditResponse.getMessage()); throw new ServiceException(baseEditResponse.getCode(), baseEditResponse.getMessage());
} }
if (totalAmount > 0 && StringUtils.isBlank(cardCode) && Objects.isNull(createPrepayRequestDto.getUnionPayCard())) { if (totalAmount > 0 && CollectionUtils.isEmpty(cardCodes) && Objects.isNull(createPrepayRequestDto.getUnionPayCard())) {
createOrderResponse.setPaySuccess(false); createOrderResponse.setPaySuccess(false);
} else if (orderPayResponse.getPayChannelType() != null && PayChannelType.COMB.getEbcode().equals(orderPayResponse.getPayChannelType().getEbcode())) { } else if (orderPayResponse.getPayChannelType() != null && PayChannelType.COMB.getEbcode().equals(orderPayResponse.getPayChannelType().getEbcode())) {
createOrderResponse.setPaySuccess(false); createOrderResponse.setPaySuccess(false);
...@@ -1019,11 +1028,13 @@ public class PayServiceImpl { ...@@ -1019,11 +1028,13 @@ public class PayServiceImpl {
//混合支付项 //混合支付项
if (CollectionUtils.isNotEmpty(orderPayResponse.getPayItem())) { if (CollectionUtils.isNotEmpty(orderPayResponse.getPayItem())) {
orderEditRequest.setOrderPayItem(orderPayResponse.getPayItem()); orderEditRequest.setOrderPayItem(orderPayResponse.getPayItem());
if (orderPayResponse.getPayItem().size() == 2) {
//混合支付已经处理好PayChannelType了
/*if (orderPayResponse.getPayItem().size() == 2) {
orderEditRequest.setPayChannel(PayChannelType.COMB.getEbcode()); orderEditRequest.setPayChannel(PayChannelType.COMB.getEbcode());
orderEditRequest.setPayChannelName(PayChannelType.COMB.getName()); orderEditRequest.setPayChannelName(PayChannelType.COMB.getName());
orderEditRequest.setPayChannelType(PayChannelType.COMB.getIndex()); orderEditRequest.setPayChannelType(PayChannelType.COMB.getIndex());
} }*/
} }
UpdateOrderReq updateOrderReq = new UpdateOrderReq(); UpdateOrderReq updateOrderReq = new UpdateOrderReq();
...@@ -1088,7 +1099,7 @@ public class PayServiceImpl { ...@@ -1088,7 +1099,7 @@ public class PayServiceImpl {
/** /**
* 支付失败处理 * 支付失败处理
*/ */
private BaseResponse failPreOrderPay(String trackingNo, OrderBeanV1 orderBean, String cardCode, OrderClientType orderClient, String msg) { private BaseResponse failPreOrderPay(String trackingNo, OrderBeanV1 orderBean, List<String> cardCodes, OrderClientType orderClient, String msg) {
List<OrderClientType> notCancelOrderClientList = Lists.newArrayList(OrderClientType.APP); List<OrderClientType> notCancelOrderClientList = Lists.newArrayList(OrderClientType.APP);
if (!notCancelOrderClientList.contains(orderClient)) { if (!notCancelOrderClientList.contains(orderClient)) {
//失败冲正库存,冲正活动库存,取消订单 //失败冲正库存,冲正活动库存,取消订单
...@@ -1121,7 +1132,7 @@ public class PayServiceImpl { ...@@ -1121,7 +1132,7 @@ public class PayServiceImpl {
orderQueueService.backOrdersStatusChange(orderBean.getOid(), orderBean.getStatus(), PayStatusEnum.NOT_PAY.getCode()); orderQueueService.backOrdersStatusChange(orderBean.getOid(), orderBean.getStatus(), PayStatusEnum.NOT_PAY.getCode());
} }
//svc 卡支付失败 //svc 卡支付失败
if (StringUtils.isNotBlank(cardCode)) { if (CollectionUtils.isNotEmpty(cardCodes)) {
return ResponseUtil.error(ResponseResultEnum.PAY_BACKEND_CONFIG_ERROR.getCode(), StringUtils.isNotBlank(msg) ? msg : ResponseResultEnum.PAY_BACKEND_CONFIG_ERROR.getMessage(), null); return ResponseUtil.error(ResponseResultEnum.PAY_BACKEND_CONFIG_ERROR.getCode(), StringUtils.isNotBlank(msg) ? msg : ResponseResultEnum.PAY_BACKEND_CONFIG_ERROR.getMessage(), null);
} }
return ResponseUtil.error(ResponseResultEnum.PAY_UNIFIED_ORDER_ERROR.getCode(), ResponseResultEnum.PAY_UNIFIED_ORDER_ERROR.getMessage(), null); return ResponseUtil.error(ResponseResultEnum.PAY_UNIFIED_ORDER_ERROR.getCode(), ResponseResultEnum.PAY_UNIFIED_ORDER_ERROR.getMessage(), null);
...@@ -1535,4 +1546,109 @@ public class PayServiceImpl { ...@@ -1535,4 +1546,109 @@ public class PayServiceImpl {
} }
/**
* 创建多卡支付
*/
public OrderPayResponse multiPay(List<String> cardNos
, OrderBeanV1 orderBean
, PaymentRequest paymentRequest
, Integer totalAmount
, String channel) {
// 统一走多卡支付Ka2.0.76-0427-0504
String partnerPayOvertime = this.getPartnerPayOvertime(orderBean.getCompanyId());
String storeId = orderBean.getShopId();
String ebCode = this.getPayCodeByChanel(paymentRequest.getWxAppId(), channel, storeId);
OrderPayResponse orderPayResponse = new OrderPayResponse();
if (StringUtils.isBlank(ebCode)) {
orderPayResponse.setMsg("请先联系相关人员配置商户对应的支付渠道");
return orderPayResponse;
}
MultiPayRequest combPayRequest = orderAdapter.convent2MultiPayOrderRequest(cardNos, orderBean, paymentRequest, partnerPayOvertime, ebCode, channel, totalAmount);
MultiPayResponse multiPayResponse = comPayClient.multiPay(combPayRequest, combPayRequest.getPartner_id());
if (multiPayResponse == null || !ResponseCodeConstant.PAYMENT_RESPONSE_SUCCESS.equals(multiPayResponse.getCode())) {
orderPayResponse.setMsg(multiPayResponse != null ? "支付:" + multiPayResponse.getMsg() : "混合支付忙不过来啦,请稍后再试");
return orderPayResponse;
}
List<MultiPayResponse.PayPlatform> payPlatforms = multiPayResponse.getData().getPayPlatformResponseList();
if (payPlatforms.size() == 0) {
orderPayResponse.setMsg("混合支付:生成预支付失败");
return orderPayResponse;
}
orderPayResponse.setWxAppid(paymentRequest.getWxAppId());
orderPayResponse.setOpenId(paymentRequest.getOpenId());
orderPayResponse.setPartnerId(orderBean.getCompanyId());
orderPayResponse.setOrderId(orderBean.getOid());
orderPayResponse.setMsg("success");
orderPayResponse.setPayId("");
MultiPayResponse.PayPlatform cashPay = null;
boolean allCardPay = true;//是否纯储值卡支付
for (MultiPayResponse.PayPlatform pt : payPlatforms) {
if (!PayChannelType.SVC.getEbcode().equals(pt.getEbCode())) {
cashPay = pt;
allCardPay = false;
}else{
SvcPayItem payItem = new SvcPayItem();
payItem.setCardCode(pt.getCardCode());
payItem.setSvcTransId(pt.getPlatformTradeNo());
payItem.setTransId(pt.getTransId());
if(CollectionUtils.isEmpty(orderPayResponse.getSvcPayItems())){
List<SvcPayItem> svcPayItems = new ArrayList<>();
svcPayItems.add(payItem);
orderPayResponse.setSvcPayItems(svcPayItems);
}else{
orderPayResponse.getSvcPayItems().add(payItem);
}
}
orderPayResponse.setFmId(pt.getTransId());
orderPayResponse.setPayTransId(pt.getTransId());
PayChannelType payChannelType = PayChannelType.getByEbcode(pt.getEbCode());
if (pt.getCardType() != null && pt.getCardType() == 0) {
payChannelType = PayChannelType.GIFTCARD;
}
orderPayResponse.setPayChannelType(payChannelType);
orderPayResponse.setPayEbcode(pt.getEbCode());
OrderPayItemResp payItem = new OrderPayItemResp();
payItem.setFmTradeNo(pt.getFmTradeNo());
payItem.setStoreId(storeId);
payItem.setPayChannelType(payChannelType.getIndex().intValue());
payItem.setPayChannelName(payChannelType.getName());
payItem.setTransId(pt.getTransId());
payItem.setPartnerId(combPayRequest.getPartner_id());
payItem.setPayAmount(new BigDecimal(pt.getPayAmount()));
payItem.setCardCode(pt.getCardCode());
orderPayResponse.getPayItem().add(payItem);
MultiPayResponse.PayPlatform.PayOrderBean payOrderBean = pt.getPayOrder();
if (null != payOrderBean) {
OrderPayResponse.PayOrderBean payBean = new OrderPayResponse.PayOrderBean();
payBean.setAppid(payOrderBean.getAppId());
payBean.setNonceStr(payOrderBean.getNonceStr());
payBean.setPackageX(payOrderBean.getPackageX());
payBean.setSign(payOrderBean.getPaySign());
payBean.setSignType(payOrderBean.getSignType());
payBean.setTimestamp(payOrderBean.getTimeStamp());
payBean.setAliPayOrder(payOrderBean.getAliPayOrder());
orderPayResponse.setPayOrder(payBean);
}
}
if (!allCardPay) {
orderPayResponse.setPayChannelType(PayChannelType.COMB);
}
//现金线上支付
if (cashPay != null) {
String transId = cashPay.getTransId();
orderPayResponse.setFmId(cashPay.getFmTradeNo());
orderPayResponse.setEndTransId(cashPay.getEndTransTradeNo());
redisCache.save(RedisUtil.getPaymentTransIdOrderKey(transId), orderBean.getOid(), 1L, TimeUnit.DAYS);
//加入轮训队列
putDelMq(orderBean.getCompanyId(), storeId, orderPayResponse.getFmId(), orderBean.getOid(), PayChannelType.getByEbcode(transId).getIndex().intValue());
}
return orderPayResponse;
}
} }
...@@ -464,7 +464,7 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService { ...@@ -464,7 +464,7 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
orderExtInfoDto.setSessionKey(userLoginInfoDto.getSessionKey()); orderExtInfoDto.setSessionKey(userLoginInfoDto.getSessionKey());
orderExtInfoDto.setFormId(requestVo.getFormId()); orderExtInfoDto.setFormId(requestVo.getFormId());
orderExtInfoDto.setFromAppId(userLoginInfoDto.getWxAppId()); orderExtInfoDto.setFromAppId(userLoginInfoDto.getWxAppId());
orderExtInfoDto.setUnDistribution(requestVo.getUnDistribution()); // orderExtInfoDto.setUnDistribution(requestVo.getUnDistribution());
createPrepayRequestDto.setOrderExtInfoDTO(orderExtInfoDto); createPrepayRequestDto.setOrderExtInfoDTO(orderExtInfoDto);
if (StringUtils.isNotBlank(requestVo.getCardCode()) || createPrepayRequestDto.getTotalAmount() == 0) { if (StringUtils.isNotBlank(requestVo.getCardCode()) || createPrepayRequestDto.getTotalAmount() == 0) {
return ResponseUtil.success(payService.createPrepayOrder(createPrepayRequestDto)); return ResponseUtil.success(payService.createPrepayOrder(createPrepayRequestDto));
......
...@@ -16,9 +16,11 @@ package cn.freemud.service.thirdparty; ...@@ -16,9 +16,11 @@ package cn.freemud.service.thirdparty;
import cn.freemud.annotations.LogIgnoreFeign; import cn.freemud.annotations.LogIgnoreFeign;
import cn.freemud.constant.ResponseCodeKeyConstant; import cn.freemud.constant.ResponseCodeKeyConstant;
import cn.freemud.entities.dto.pay.CombPayResponse; import cn.freemud.entities.dto.pay.CombPayResponse;
import cn.freemud.entities.dto.pay.MultiPayResponse;
import cn.freemud.entities.dto.pay.MultiQueryRequest; import cn.freemud.entities.dto.pay.MultiQueryRequest;
import cn.freemud.entities.dto.pay.MultiQueryRespDto; import cn.freemud.entities.dto.pay.MultiQueryRespDto;
import com.freemud.sdk.api.assortment.order.request.payment.CombPayRequest; import com.freemud.sdk.api.assortment.order.request.payment.CombPayRequest;
import com.freemud.sdk.api.assortment.order.request.payment.MultiPayRequest;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
...@@ -44,4 +46,11 @@ public interface ComPayClient { ...@@ -44,4 +46,11 @@ public interface ComPayClient {
@PostMapping("/payment/application/query") @PostMapping("/payment/application/query")
MultiQueryRespDto paymentApplicationQuery(@RequestBody MultiQueryRequest multiQueryRequest, @RequestHeader("partnerId") Integer partnerId); MultiQueryRespDto paymentApplicationQuery(@RequestBody MultiQueryRequest multiQueryRequest, @RequestHeader("partnerId") Integer partnerId);
/**
* 多卡支付统一下单
*/
@LogIgnoreFeign(logMessage="multiPay",messageFieldName= ResponseCodeKeyConstant.MSG)
@PostMapping("/payment/application/multiPay")
MultiPayResponse multiPay(@RequestBody MultiPayRequest multiPayRequest, @RequestHeader("partnerId") String partnerId);
} }
...@@ -214,7 +214,7 @@ public class OrderExtInfoDto { ...@@ -214,7 +214,7 @@ public class OrderExtInfoDto {
* *
* 1 表示不分账 ,其他情况 不传值 给基础服务 * 1 表示不分账 ,其他情况 不传值 给基础服务
*/ */
private Integer unDistribution; // private Integer unDistribution;
/** /**
......
...@@ -38,4 +38,7 @@ public class OrderPayItemResp { ...@@ -38,4 +38,7 @@ public class OrderPayItemResp {
* 支付交易号 * 支付交易号
*/ */
private String orderPayItemCode; private String orderPayItemCode;
//卡号 多卡支付multiPay接口返回
private String cardCode;
} }
\ No newline at end of file
...@@ -120,6 +120,12 @@ public class ShoppingCartInfoRequestVo extends BaseRequestVo { ...@@ -120,6 +120,12 @@ public class ShoppingCartInfoRequestVo extends BaseRequestVo {
* svc 卡支付使用 * svc 卡支付使用
*/ */
private String cardCode; private String cardCode;
/**
* svc 卡支付使用 多卡
*/
private List<String> cardCodes;
/** /**
* 收货地址ID、svc卡支付外卖订单必传 * 收货地址ID、svc卡支付外卖订单必传
*/ */
......
...@@ -1012,11 +1012,17 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1012,11 +1012,17 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
*/ */
@Override @Override
public BaseResponse getGoodsListCheck(ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) { public BaseResponse getGoodsListCheck(ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
if (StringUtils.isBlank(shoppingCartInfoRequestVo.getCardCode())) { List<String> cardCodes = new ArrayList<>();
if(CollectionUtils.isNotEmpty(shoppingCartInfoRequestVo.getCardCodes())){
cardCodes.addAll(shoppingCartInfoRequestVo.getCardCodes());
}else if(StringUtils.isNotBlank(shoppingCartInfoRequestVo.getCardCode())){
cardCodes.add(shoppingCartInfoRequestVo.getCardCode());
}
if (CollectionUtils.isEmpty(cardCodes)) {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING); return ResponseUtil.error(ResponseResult.PARAMETER_MISSING);
} }
//打包带走外卖 //打包带走外卖
if (StringUtils.isNotBlank(shoppingCartInfoRequestVo.getCardCode()) && Objects.equals(shoppingCartInfoRequestVo.getOrderType(), 2) if (CollectionUtils.isNotEmpty(cardCodes) && Objects.equals(shoppingCartInfoRequestVo.getOrderType(), 2)
&& StringUtils.isBlank(shoppingCartInfoRequestVo.getReceiveId())) { && StringUtils.isBlank(shoppingCartInfoRequestVo.getReceiveId())) {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING); return ResponseUtil.error(ResponseResult.PARAMETER_MISSING);
} }
...@@ -1034,7 +1040,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1034,7 +1040,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
BaseListCartGoodsVO result = goodsList.getResult(); BaseListCartGoodsVO result = goodsList.getResult();
//SVC卡支付 //SVC卡支付
SVCCardPay(shoppingCartInfoRequestVo.getCardCode(), shoppingCartInfoRequestVo.getReceiveId(), partnerId, storeId, result); SVCCardPay(cardCodes, shoppingCartInfoRequestVo.getReceiveId(), partnerId, storeId, result);
return ResponseUtil.success(goodsList.getResult()); return ResponseUtil.success(goodsList.getResult());
} else { } else {
...@@ -1045,7 +1051,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1045,7 +1051,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
} }
ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo = goodsList.getResult(); ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo = goodsList.getResult();
//SVC卡支付 //SVC卡支付
SVCCardPay(shoppingCartInfoRequestVo.getCardCode(), shoppingCartInfoRequestVo.getReceiveId(), partnerId, storeId, shoppingCartGoodsResponseVo); SVCCardPay(cardCodes, shoppingCartInfoRequestVo.getReceiveId(), partnerId, storeId, shoppingCartGoodsResponseVo);
return ResponseUtil.success(goodsList.getResult()); return ResponseUtil.success(goodsList.getResult());
} }
...@@ -2512,16 +2518,16 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -2512,16 +2518,16 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
* 储值卡支付余额校验 * 储值卡支付余额校验
* 校验订单商品金额与外卖配送费 * 校验订单商品金额与外卖配送费
*/ */
private void SVCCardPay(String cardCode, String receiveId, String partnerId, String storeId, private void SVCCardPay(List<String> cardCodes, String receiveId, String partnerId, String storeId,
BaseListCartGoodsVO shoppingCartGoodsResponseVo) { BaseListCartGoodsVO shoppingCartGoodsResponseVo) {
if (StringUtils.isBlank(cardCode)) { if (CollectionUtils.isEmpty(cardCodes)) {
return; return;
} }
Integer orderAmount = shoppingCartGoodsResponseVo.getTotalAmount().intValue(); Integer orderAmount = shoppingCartGoodsResponseVo.getTotalAmount().intValue();
String trackingNo = LogThreadLocal.getTrackingNo(); String trackingNo = LogThreadLocal.getTrackingNo();
SVCCardAmountRequest request = new SVCCardAmountRequest(); SVCCardAmountRequest request = new SVCCardAmountRequest();
request.setPartnerId(partnerId); request.setPartnerId(partnerId);
request.setCardCodes(Arrays.asList(cardCode)); request.setCardCodes(cardCodes);
//查询svc卡金额 //查询svc卡金额
BaseResponse<SVCCardAmountResponse> response = svcAppClient.batchQueryCardAmount(request); BaseResponse<SVCCardAmountResponse> response = svcAppClient.batchQueryCardAmount(request);
if (response == null) { if (response == null) {
...@@ -2530,67 +2536,47 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -2530,67 +2536,47 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
if (response.getResult() == null || CollectionUtils.isEmpty(response.getResult().getCardSimpleInfos())) { if (response.getResult() == null || CollectionUtils.isEmpty(response.getResult().getCardSimpleInfos())) {
throw new ServiceException(ResponseResult.USER_SVC_CARD_ERROR); throw new ServiceException(ResponseResult.USER_SVC_CARD_ERROR);
} }
boolean check = this.checkSvcComPay(partnerId, storeId);
Integer applyType = response.getResult().getCardSimpleInfos().get(0).getApplyType(); Integer applyType = response.getResult().getCardSimpleInfos().get(0).getApplyType();
applyType = applyType == null ? 3 : applyType; applyType = applyType == null ? 3 : applyType;
String svcDesc = applyType == 3 ? "储值卡支付¥" : "礼品卡支付¥"; String svcDesc = applyType == 3 ? "储值卡支付¥" : "礼品卡支付¥";
if (check) { int totalAmount = response.getResult().getCardSimpleInfos().stream().mapToInt(CardSimpleInfo::getAmount).sum();
//混合支付无需校验svc卡余额,但是配送和包装费不计算在svc卡支付 int totalVamount = response.getResult().getCardSimpleInfos().stream().mapToInt(CardSimpleInfo::getVamount).sum();
Integer amount1 = response.getResult().getCardSimpleInfos().get(0).getAmount(); Integer svcTotalAmount = totalAmount + totalVamount;
Integer vamount = response.getResult().getCardSimpleInfos().get(0).getVamount(); //获取实际配送费
Integer svcTotalAmount = amount1 + vamount; Integer deliveryAmount = 0;
//获取实际配送费 Integer svcPayAmount = 0;
Integer deliveryAmount = 0; if (StringUtils.isNotBlank(receiveId) && shoppingCartGoodsResponseVo.getDiscountDeliveryAmount() != null) {
Integer svcPayAmount = 0; //Integer deliveryAmount = getDeliveryAmount(receiveId, partnerId, storeId);
if (StringUtils.isNotBlank(receiveId) && shoppingCartGoodsResponseVo.getDiscountDeliveryAmount() != null) { deliveryAmount = shoppingCartGoodsResponseVo.getDiscountDeliveryAmount().intValue();
//Integer deliveryAmount = getDeliveryAmount(receiveId, partnerId, storeId); orderAmount += deliveryAmount;
deliveryAmount = shoppingCartGoodsResponseVo.getDiscountDeliveryAmount().intValue(); }
orderAmount += deliveryAmount; if (svcTotalAmount > 0 && svcTotalAmount > orderAmount) {
} svcPayAmount = orderAmount;
if (svcTotalAmount > 0 && svcTotalAmount > orderAmount) {
svcPayAmount = orderAmount;
shoppingCartGoodsResponseVo.setTotalAmount(0L);
} else if (svcTotalAmount > 0 && svcTotalAmount <= orderAmount) {
svcPayAmount = svcTotalAmount;
shoppingCartGoodsResponseVo.setTotalAmount((orderAmount.longValue() - svcPayAmount.longValue()));
}
BigDecimal bigDecimal = new BigDecimal(svcPayAmount);
String amountStr = bigDecimal.divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
shoppingCartGoodsResponseVo.setSvcPayAmount(amountStr);
shoppingCartGoodsResponseVo.setSvcDiscountDesc(svcDesc + amountStr);
} else {
//获取实际配送费
if (StringUtils.isNotBlank(receiveId) && shoppingCartGoodsResponseVo.getDiscountDeliveryAmount() != null) {
Integer deliveryAmount = shoppingCartGoodsResponseVo.getDiscountDeliveryAmount().intValue();
orderAmount += deliveryAmount;
}
Integer amount1 = response.getResult().getCardSimpleInfos().get(0).getAmount();
Integer vamount = response.getResult().getCardSimpleInfos().get(0).getVamount();
if (orderAmount > amount1 + vamount) {
throw new ServiceException(ResponseResult.USER_SVC_CARD_AMOUNT_DEFICIENCY);
}
BigDecimal bigDecimal = new BigDecimal(orderAmount);
String amountStr = bigDecimal.divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
shoppingCartGoodsResponseVo.setTotalAmount(0L); shoppingCartGoodsResponseVo.setTotalAmount(0L);
shoppingCartGoodsResponseVo.setSvcDiscountDesc(svcDesc + amountStr); } else if (svcTotalAmount > 0 && svcTotalAmount <= orderAmount) {
svcPayAmount = svcTotalAmount;
shoppingCartGoodsResponseVo.setTotalAmount((orderAmount.longValue() - svcPayAmount.longValue()));
} }
BigDecimal bigDecimal = new BigDecimal(svcPayAmount);
String amountStr = bigDecimal.divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
shoppingCartGoodsResponseVo.setSvcPayAmount(amountStr);
shoppingCartGoodsResponseVo.setSvcDiscountDesc(svcDesc + amountStr);
} }
/** /**
* 储值卡支付余额校验 * 储值卡支付余额校验
* 校验订单商品金额与外卖配送费 * 校验订单商品金额与外卖配送费
*/ */
private void SVCCardPay(String cardCode, String receiveId, String partnerId, String storeId, private void SVCCardPay(List<String> cardCodes, String receiveId, String partnerId, String storeId,
ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo) { ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo) {
if (StringUtils.isBlank(cardCode)) { if (CollectionUtils.isEmpty(cardCodes)) {
return; return;
} }
Integer orderAmount = shoppingCartGoodsResponseVo.getTotalAmount().intValue(); Integer orderAmount = shoppingCartGoodsResponseVo.getTotalAmount().intValue();
String trackingNo = LogThreadLocal.getTrackingNo(); String trackingNo = LogThreadLocal.getTrackingNo();
SVCCardAmountRequest request = new SVCCardAmountRequest(); SVCCardAmountRequest request = new SVCCardAmountRequest();
request.setPartnerId(partnerId); request.setPartnerId(partnerId);
request.setCardCodes(Arrays.asList(cardCode)); request.setCardCodes(cardCodes);
//查询svc卡金额 //查询svc卡金额
BaseResponse<SVCCardAmountResponse> response = svcAppClient.batchQueryCardAmount(request); BaseResponse<SVCCardAmountResponse> response = svcAppClient.batchQueryCardAmount(request);
if (response == null) { if (response == null) {
...@@ -2599,52 +2585,33 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -2599,52 +2585,33 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
if (response.getResult() == null || CollectionUtils.isEmpty(response.getResult().getCardSimpleInfos())) { if (response.getResult() == null || CollectionUtils.isEmpty(response.getResult().getCardSimpleInfos())) {
throw new ServiceException(ResponseResult.USER_SVC_CARD_ERROR); throw new ServiceException(ResponseResult.USER_SVC_CARD_ERROR);
} }
boolean check = this.checkSvcComPay(partnerId, storeId);
Integer applyType = response.getResult().getCardSimpleInfos().get(0).getApplyType(); Integer applyType = response.getResult().getCardSimpleInfos().get(0).getApplyType();
applyType = applyType == null ? 3 : applyType; applyType = applyType == null ? 3 : applyType;
String svcDesc = applyType == 3 ? "储值卡支付¥" : "礼品卡支付¥"; String svcDesc = applyType == 3 ? "储值卡支付¥" : "礼品卡支付¥";
if (check) { int totalAmount = response.getResult().getCardSimpleInfos().stream().mapToInt(CardSimpleInfo::getAmount).sum();
//混合支付无需校验svc卡余额,但是配送和包装费不计算在svc卡支付 int totalVamount = response.getResult().getCardSimpleInfos().stream().mapToInt(CardSimpleInfo::getVamount).sum();
Integer amount1 = response.getResult().getCardSimpleInfos().get(0).getAmount(); Integer svcTotalAmount = totalAmount + totalVamount;
Integer vamount = response.getResult().getCardSimpleInfos().get(0).getVamount(); //获取实际配送费
Integer svcTotalAmount = amount1 + vamount; Integer deliveryAmount = 0;
//获取实际配送费 Integer svcPayAmount = 0;
Integer deliveryAmount = 0; if (StringUtils.isNotBlank(receiveId) && shoppingCartGoodsResponseVo.getDiscountDeliveryAmount() != null) {
Integer svcPayAmount = 0; deliveryAmount = shoppingCartGoodsResponseVo.getDiscountDeliveryAmount().intValue();
if (StringUtils.isNotBlank(receiveId) && shoppingCartGoodsResponseVo.getDiscountDeliveryAmount() != null) { orderAmount += deliveryAmount;
deliveryAmount = shoppingCartGoodsResponseVo.getDiscountDeliveryAmount().intValue(); }
orderAmount += deliveryAmount; if (svcTotalAmount > 0 && svcTotalAmount > orderAmount) {
} svcPayAmount = orderAmount;
if (svcTotalAmount > 0 && svcTotalAmount > orderAmount) {
svcPayAmount = orderAmount;
shoppingCartGoodsResponseVo.setTotalAmount(0L);
} else if (svcTotalAmount > 0 && svcTotalAmount <= orderAmount) {
svcPayAmount = svcTotalAmount;
shoppingCartGoodsResponseVo.setTotalAmount((orderAmount.longValue() - svcPayAmount.longValue()));
}
BigDecimal bigDecimal = new BigDecimal(svcPayAmount);
String amountStr = bigDecimal.divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
shoppingCartGoodsResponseVo.setSvcPayAmount(amountStr);
shoppingCartGoodsResponseVo.setSvcDiscountDesc(svcDesc + amountStr);
} else {
//获取实际配送费
if (StringUtils.isNotBlank(receiveId) && shoppingCartGoodsResponseVo.getDiscountDeliveryAmount() != null) {
Integer deliveryAmount = shoppingCartGoodsResponseVo.getDiscountDeliveryAmount().intValue();
orderAmount += deliveryAmount;
}
Integer amount1 = response.getResult().getCardSimpleInfos().get(0).getAmount();
Integer vamount = response.getResult().getCardSimpleInfos().get(0).getVamount();
if (orderAmount > amount1 + vamount) {
throw new ServiceException(ResponseResult.USER_SVC_CARD_AMOUNT_DEFICIENCY);
}
BigDecimal bigDecimal = new BigDecimal(orderAmount);
String amountStr = bigDecimal.divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
shoppingCartGoodsResponseVo.setTotalAmount(0L); shoppingCartGoodsResponseVo.setTotalAmount(0L);
shoppingCartGoodsResponseVo.setSvcDiscountDesc(svcDesc + amountStr); } else if (svcTotalAmount > 0 && svcTotalAmount <= orderAmount) {
svcPayAmount = svcTotalAmount;
shoppingCartGoodsResponseVo.setTotalAmount((orderAmount.longValue() - svcPayAmount.longValue()));
} }
BigDecimal bigDecimal = new BigDecimal(svcPayAmount);
String amountStr = bigDecimal.divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
shoppingCartGoodsResponseVo.setSvcPayAmount(amountStr);
shoppingCartGoodsResponseVo.setSvcDiscountDesc(svcDesc + amountStr);
} }
/** /**
* 储值卡支付查询配送费 * 储值卡支付查询配送费
* *
......
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