Commit d1df7f9e by 张志恒

Merge remote-tracking branch 'origin/feature/2020-1104-混合支付' into develop

parents 8fb323ff 4619fcb7
......@@ -34,8 +34,10 @@ import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.log.ThirdPartyLog;
import com.freemud.application.sdk.api.ordercenter.enums.NewOrderStatus;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.enums.PayChannelType;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderItemResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderPayItemReqs;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettlementResp;
import com.freemud.sdk.api.assortment.orderdistributor.request.DisRequest;
import com.freemud.sdk.api.assortment.orderdistributor.service.OrderDistributionService;
......@@ -51,10 +53,7 @@ import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.*;
@Component
@Slf4j
......@@ -221,12 +220,23 @@ public class OrderCallBackMQService {
AssortmentOpenPlatformWxapp wxApp = openPlatformWxappManager.findByPartnerIdAndWxappId(userLoginInfoDto.getPartnerId(), userLoginInfoDto.getWxAppid());
wechatReportOrderDto.setSubMchId(wxApp == null ? "" : wxApp.getMchId());
}
// 混合支付
Integer userAmount = 0;
if (orderInfoReqs.getOrderPayItemCreateReqList().size()>0) {
OrderPayItemReqs orderPayItemReqs = orderInfoReqs.getOrderPayItemCreateReqList()
.stream()
.filter(s -> s.getPayChannelType().equals(PayChannelType.WECHAT.getIndex().intValue()) || s.getPayChannelType().equals(PayChannelType.ALIPAY.getIndex().intValue()))
.findFirst().orElse(null);
if (orderPayItemReqs!=null) {
userAmount = orderPayItemReqs.getPayAmount().intValue();
}
}
wechatReportOrderDto.setPayVoucher(orderInfoReqs.getPayRequestNo());
wechatReportOrderDto.setSubAppId(userLoginInfoDto.getWxAppid());
wechatReportOrderDto.setOutShopNo(orderInfoReqs.getStoreId());
wechatReportOrderDto.setSubOpenId(userLoginInfoDto.getOpenId());
wechatReportOrderDto.setLoginToken(userLoginInfoDto.getSessionKey());
wechatReportOrderDto.setUserAmount(orderInfoReqs.getSettlementAmount().intValue());
wechatReportOrderDto.setUserAmount(userAmount >0 ? userAmount :orderInfoReqs.getSettlementAmount().intValue());
wechatReportOrderDto.setOutOrderNo(orderInfoReqs.getOrderCode());
wechatReportOrderDto.setTransactionId(orderExtInfoDto.getPaid_no());
wechatReportOrderDto.setOutTradeNo(orderExtInfoDto.getPayTransId());
......@@ -245,7 +255,7 @@ public class OrderCallBackMQService {
}
}
}
wechatReportOrderDto.setTotalAmount(discountAmount+orderInfoReqs.getSettlementAmount().intValue());
wechatReportOrderDto.setTotalAmount(discountAmount+(userAmount >0 ? userAmount : orderInfoReqs.getSettlementAmount().intValue()));
wechatReportOrderDto.setDiscountAmount(discountAmount);
//订单状态 (2—用户下单;1—支付完成)
wechatReportOrderDto.setStatus(NewOrderStatus.PENDING_PAYMENT.getIndex().equals(orderInfoReqs.getOrderState()) ? 2 : 1);
......
......@@ -28,8 +28,8 @@ import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.entities.vo.encircle.CreateReserveOrderVo;
import cn.freemud.entities.vo.encircle.PreviewOrderInfoVo;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.*;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.OrderChannelType;
import cn.freemud.enums.OrderSourceType;
import cn.freemud.enums.OrderType;
......@@ -619,23 +619,15 @@ public class OrderAdapter {
if (Objects.nonNull(createOrderVo.getUnionPayCard())) {
createOrderDto.setPayChannel(PayChannelType.USVCP.getEbcode());
createOrderDto.setPayChannelName(PayChannelType.USVCP.getName());
createOrderDto.setPayChannelType(PayChannelType.USVCP.getIndex());
}
//混合支付
else if (PayChannelType.COMB.getIndex().equals(createOrderVo.getPayChannelType())) {
createOrderDto.setPayChannel(PayChannelType.COMB.getEbcode());
createOrderDto.setPayChannelName(PayChannelType.COMB.getName());
}
else if (PayChannelType.WECHAT.getIndex().equals(createOrderVo.getPayChannelType())) {
createOrderDto.setPayChannel(PayChannelType.WECHAT.getEbcode());
createOrderDto.setPayChannelName(PayChannelType.WECHAT.getName());
}
else if (PayChannelType.ALIPAY.getIndex().equals(createOrderVo.getPayChannelType())) {
createOrderDto.setPayChannel(PayChannelType.ALIPAY.getEbcode());
createOrderDto.setPayChannelName(PayChannelType.ALIPAY.getName());
if (StringUtils.isNotBlank(createOrderVo.getChannel())) {
PayChannelType channelType = PayChannelType.getByIndex(Byte.parseByte(createOrderVo.getChannel()));
if (channelType!=null) {
createOrderDto.setPayChannel(channelType.getEbcode());
createOrderDto.setPayChannelName(channelType.getName());
createOrderDto.setPayChannelType(channelType.getIndex());
}
else if(StringUtils.isNotBlank(createOrderVo.getCardCode())){
createOrderDto.setPayChannel(PayChannelType.SVC.getEbcode());
createOrderDto.setPayChannelName(PayChannelType.SVC.getName());
}
createOrderDto.setSource(OrderSourceType.SAAS.getCode());
createOrderDto.setSourceName(OrderSourceType.SAAS.getDesc());
......@@ -1138,18 +1130,17 @@ public class OrderAdapter {
responseVo.setPayCreateTime(orderExtInfoDto != null ? orderExtInfoDto.getPayDate() : "");
responseVo.setPayChannel(ordersBean.getPayChannel());
if (StringUtils.isNotBlank(ordersBean.getPayChannel())) {
if ("10102".equals(ordersBean.getPayChannel())) {
responseVo.setOrderPayType("储值卡支付");
} else if (PayChannel.ALIPAY.getCode().equals(ordersBean.getPayChannel())) {
responseVo.setOrderPayType("支付宝支付");
} else if (PayChannel.WXPAY.getCode().equals(ordersBean.getPayChannel())) {
responseVo.setOrderPayType("微信支付");
} else if (Objects.equals(PayChannel.USVCP.getCode(), ordersBean.getPayChannel())) {
responseVo.setOrderPayType("电子风味卡支付");
} else {
responseVo.setOrderPayType("微信支付");
PayChannelType ebcode = PayChannelType.getByEbcode(ordersBean.getPayChannel());
if (ebcode!=null) {
responseVo.setOrderPayType(ebcode.getName());
}
else {
responseVo.setOrderPayType(PayChannelType.WECHAT.getName());
}
}
else if (ordersBean.getOrderPayItem().size()>0) {
responseVo.setOrderPayType(PayChannelType.COMB.getName());
}
else {
if (OrderSourceType.ALIPAY.getCode().equals(ordersBean.getSource())) {
responseVo.setOrderPayType("支付宝支付");
......@@ -3664,8 +3655,7 @@ public class OrderAdapter {
, String partnerPayOvertime
, String orderClient
, String channel
, Integer totalAmount
, Integer svcAmount) {
, Integer totalAmount) {
CombPayRequest orderPayDto = new CombPayRequest();
orderPayDto.setEbCode(paymentRequest.getPayCode());
orderPayDto.setPartner_id(orderBean.getCompanyId());
......@@ -3696,16 +3686,15 @@ public class OrderAdapter {
}
orderPayDto.setProducts(productVOS);
List<PayPlatformVO> platforms = new ArrayList<>();
Long svc = svcAmount.longValue();
PayPlatformVO payPlatformVO = new PayPlatformVO();
payPlatformVO.setClientCode(PayChannelType.SVC.getEbcode());
payPlatformVO.setEbcode(PayChannelType.SVC.getEbcode());
payPlatformVO.setAmount(svc);
payPlatformVO.setAmount(0L);
platforms.add(payPlatformVO);
String ebcode = PayChannelType.getByIndex(Byte.parseByte(channel)).getEbcode();
payPlatformVO = new PayPlatformVO();
payPlatformVO.setAmount(totalAmount.longValue() - svc);
payPlatformVO.setAmount(0L);
payPlatformVO.setClientCode(orderClient);
payPlatformVO.setEbcode(ebcode);
platforms.add(payPlatformVO);
......@@ -3723,9 +3712,7 @@ public class OrderAdapter {
*/
public OrderPayResponse convent2OrderCombPayResponse(List<CombPayResponse.PayPlatform> payPlatforms
,String partnerId
,String storeId
,Integer totalAmount
,Integer svcAmount) {
,String storeId) {
CombPayResponse.PayPlatform payPlatform = payPlatforms
.stream()
.filter(f -> !PayChannelType.SVC.getEbcode().equals(f.getEbCode())).findFirst()
......@@ -3750,7 +3737,6 @@ public class OrderAdapter {
responseDto.setPayOrder(payBean);
}
//供修改订单
Integer cashAmount = totalAmount - svcAmount;
for (CombPayResponse.PayPlatform pt : payPlatforms) {
PayItem payItem = new PayItem();
payItem.setFmTradeNo(pt.getFmTradeNo());
......@@ -3759,14 +3745,19 @@ public class OrderAdapter {
payItem.setPayChannelName(PayChannelType.getByEbcode(pt.getEbCode()).getName());
payItem.setTransId(pt.getTransId());
payItem.setPartnerId(partnerId);
if (pt.getEbCode().equals(PayChannel.SVC.getCode())) {
payItem.setPayAmount(new BigDecimal(svcAmount));
if (PayChannelType.SVC.getEbcode().equals(pt.getEbCode())) {
payItem.setPayAmount(new BigDecimal(pt.getPayAmount()));
responseDto.setPayMode(PayChannelType.SVC.getEbcode());
}
else {
payItem.setPayAmount(new BigDecimal(cashAmount));
else if (PayChannelType.WECHAT.getEbcode().equals(pt.getEbCode()) || PayChannelType.ALIPAY.getEbcode().equals(pt.getEbCode())){
payItem.setPayAmount(new BigDecimal(pt.getPayAmount()));
responseDto.setPayMode(PayChannelType.getByEbcode(pt.getEbCode()).getEbcode());
}
responseDto.getPayItem().add(payItem);
}
if(responseDto.getPayItem().size()==2) {
responseDto.setPayMode(PayChannelType.COMB.getEbcode());
}
return responseDto;
}
......
......@@ -14,11 +14,11 @@ package cn.freemud.entities.dto;
import com.freemud.application.sdk.api.ordercenter.response.OrderPayItemResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderCostResp;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import java.math.BigDecimal;
import java.util.List;
......@@ -200,6 +200,7 @@ public class QueryOrdersResponseDto {
private AddDeliveryInfo addInfo;
private List<OrderCostResp> orderCostDetailList;
private List<QueryOrdersResponse.DataBean.OrderBean.OrderPayItem> orderPayItem;
/**
* 订单操作状态(从订单操作历史表中获取)
......
......@@ -51,12 +51,12 @@ public class CombPayResponse {
@ApiModelProperty(value = "外部交易流水号,由上游系统生成,需保证唯一")
private String outOrderNo;
@ApiModelProperty(value = "支付帐号")
private String payAccount;
@ApiModelProperty(value = "第三方支付交易序号")
private String platformTradeNo;
@ApiModelProperty(value = "支付金额")
private Integer payAmount;
@ApiModelProperty(value = "间联单号")
private String transId;
@ApiModelProperty(value = "")
......
......@@ -3,6 +3,7 @@ package cn.freemud.service.impl;
import cn.freemud.adapter.OrderAdapter;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.dto.ConfirmOrderDto;
import cn.freemud.entities.dto.QueryOrdersResponseDto;
import cn.freemud.entities.vo.AppCreateOrderVo;
......@@ -234,6 +235,10 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
return gson.toJson(message);
}
QueryOrdersResponseDto.DataBean.OrderBean orderBean = orderBeans.get(OrderBeanType.SAASORDER.getCode());
// 混合支付失败,取消订单
if (!message.getResult_code().equals(ResponseCodeConstant.RESPONSE_SUCCESS)) {
return orderService.cannelComPayOrder(confirmOrderDto, orderBean);
}
if (!PayStatus.NOT_PAY.getCode().equals(orderBean.getPayStatus())){
return orderAdapter.sendPaySuccessNoticeMessage();
}
......
......@@ -151,7 +151,7 @@ public class ShoppingCartGoodsResponseVo extends ShoppingCartGoodsBaseResponseV
/**
* 支付金额
*/
private Integer svcPayAmount;
private String svcPayAmount;
/**
* 总的优惠信息集合
......
......@@ -1669,34 +1669,18 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
deliveryAmount = shoppingCartGoodsResponseVo.getDiscountDeliveryAmount().intValue();
orderAmount += deliveryAmount;
}
log.info("svcPrice:totalAmount:{},orderAmount:{},deliveryAmount:{}",shoppingCartGoodsResponseVo.getTotalAmount().intValue(),orderAmount,deliveryAmount);
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 svcPayAmount = BigDecimal.ZERO;
if (orderAmount >= amount1 + vamount) {
//throw new ServiceException(ResponseResult.USER_SVC_CARD_AMOUNT_DEFICIENCY);
svcPayAmount = new BigDecimal(amount1 + vamount).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP);
shoppingCartGoodsResponseVo.setTotalAmount(orderAmount - svcPayAmount.multiply(new BigDecimal(100)).longValue());
shoppingCartGoodsResponseVo.setTotalAmount((orderAmount.longValue()-svcPayAmount.longValue()));
}
else {
svcPayAmount = new BigDecimal(orderAmount - deliveryAmount).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP);
shoppingCartGoodsResponseVo.setTotalAmount(deliveryAmount.longValue());
}
*/
shoppingCartGoodsResponseVo.setSvcPayAmount(svcPayAmount);
shoppingCartGoodsResponseVo.setSvcDiscountDesc("储值卡支付¥" + svcPayAmount);
//BigDecimal bigDecimal = new BigDecimal(orderAmount);
//String amountStr = bigDecimal.divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
//shoppingCartGoodsResponseVo.setTotalAmount(0L);
//shoppingCartGoodsResponseVo.setSvcDiscountDesc("储值卡支付¥" + amountStr);
BigDecimal bigDecimal = new BigDecimal(svcPayAmount);
String amountStr = bigDecimal.divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
shoppingCartGoodsResponseVo.setSvcPayAmount(amountStr);
shoppingCartGoodsResponseVo.setSvcDiscountDesc("储值卡支付¥" + 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