Commit 3dc90aa6 by vega

Merge branch 'feature/1.9.36-新增银联礼品卡支付-肖家炜'

# Conflicts:
#	order-application-service/pom.xml
#	order-application-service/src/main/java/cn/freemud/adapter/OrderAdapter.java
#	order-application-service/src/main/java/cn/freemud/entities/vo/CreateOrderVo.java
#	order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
parents a2a4bc16 8eef2357
...@@ -543,7 +543,10 @@ public class OrderAdapter { ...@@ -543,7 +543,10 @@ public class OrderAdapter {
createOrderDto.setLongitude(longitude); createOrderDto.setLongitude(longitude);
createOrderDto.setOrderType(convent2OrderTypeEnum(orderType)); createOrderDto.setOrderType(convent2OrderTypeEnum(orderType));
createOrderDto.setPayType(QueryPayType.ONLINE_PAY); createOrderDto.setPayType(QueryPayType.ONLINE_PAY);
if(StringUtils.isNotBlank(createOrderVo.getCardCode())){ if (Objects.nonNull(createOrderVo.getUnionPayCard())) {
createOrderDto.setPayChannel(PayChannel.USVCP.getCode());
createOrderDto.setPayChannelName(PayChannel.USVCP.getDesc());
} else if(StringUtils.isNotBlank(createOrderVo.getCardCode())){
createOrderDto.setPayChannel("10102"); createOrderDto.setPayChannel("10102");
createOrderDto.setPayChannelName("储值卡支付"); createOrderDto.setPayChannelName("储值卡支付");
} }
...@@ -599,7 +602,10 @@ public class OrderAdapter { ...@@ -599,7 +602,10 @@ public class OrderAdapter {
productOrderInfo.setBizType(1); productOrderInfo.setBizType(1);
productOrderInfo.setOrderType(orderType); productOrderInfo.setOrderType(orderType);
productOrderInfo.setPayType(QueryPayType.ONLINE_PAY); productOrderInfo.setPayType(QueryPayType.ONLINE_PAY);
if(StringUtils.isNotBlank(createOrderVo.getCardCode())){ if (Objects.nonNull(createOrderVo.getUnionPayCard())) {
productOrderInfo.setPayChannel(PayChannel.USVCP.getCode());
productOrderInfo.setPayChannelName(PayChannel.USVCP.getDesc());
} else if(StringUtils.isNotBlank(createOrderVo.getCardCode())){
productOrderInfo.setPayChannel("10102"); productOrderInfo.setPayChannel("10102");
productOrderInfo.setPayChannelName("储值卡支付"); productOrderInfo.setPayChannelName("储值卡支付");
} }
...@@ -729,7 +735,10 @@ public class OrderAdapter { ...@@ -729,7 +735,10 @@ public class OrderAdapter {
memberOrderInfo.setOrderType(orderType); memberOrderInfo.setOrderType(orderType);
memberOrderInfo.setIsParent(false); memberOrderInfo.setIsParent(false);
memberOrderInfo.setOrderClient(OrderClientType.I_MEMBER.getIndex()); memberOrderInfo.setOrderClient(OrderClientType.I_MEMBER.getIndex());
if(StringUtils.isNotBlank(createOrderVo.getCardCode())){ if (Objects.nonNull(createOrderVo.getUnionPayCard())) {
memberOrderInfo.setPayChannel(PayChannel.USVCP.getCode());
memberOrderInfo.setPayChannelName(PayChannel.USVCP.getDesc());
} else if(StringUtils.isNotBlank(createOrderVo.getCardCode())){
memberOrderInfo.setPayChannel("10102"); memberOrderInfo.setPayChannel("10102");
memberOrderInfo.setPayChannelName("储值卡支付"); memberOrderInfo.setPayChannelName("储值卡支付");
} }
...@@ -769,7 +778,10 @@ public class OrderAdapter { ...@@ -769,7 +778,10 @@ public class OrderAdapter {
fatherOrderInfo.setIsParent(true); fatherOrderInfo.setIsParent(true);
fatherOrderInfo.setOrderClient(OrderClientType.SAAS.getIndex()); fatherOrderInfo.setOrderClient(OrderClientType.SAAS.getIndex());
fatherOrderInfo.setOrderType(orderType); fatherOrderInfo.setOrderType(orderType);
if(StringUtils.isNotBlank(createOrderVo.getCardCode())){ if (Objects.nonNull(createOrderVo.getUnionPayCard())) {
fatherOrderInfo.setPayChannel(PayChannel.USVCP.getCode());
fatherOrderInfo.setPayChannelName(PayChannel.USVCP.getDesc());
} else if(StringUtils.isNotBlank(createOrderVo.getCardCode())){
fatherOrderInfo.setPayChannel("10102"); fatherOrderInfo.setPayChannel("10102");
fatherOrderInfo.setPayChannelName("储值卡支付"); fatherOrderInfo.setPayChannelName("储值卡支付");
} }
...@@ -1041,6 +1053,8 @@ public class OrderAdapter { ...@@ -1041,6 +1053,8 @@ public class OrderAdapter {
responseVo.setOrderPayType("支付宝支付"); responseVo.setOrderPayType("支付宝支付");
} else if (PayChannel.WXPAY.getCode().equals(ordersBean.getPayChannel())) { } else if (PayChannel.WXPAY.getCode().equals(ordersBean.getPayChannel())) {
responseVo.setOrderPayType("微信支付"); responseVo.setOrderPayType("微信支付");
} else if (Objects.equals(PayChannel.USVCP.getCode(), ordersBean.getPayChannel())) {
responseVo.setOrderPayType("电子风味卡支付");
} else { } else {
responseVo.setOrderPayType("微信支付"); responseVo.setOrderPayType("微信支付");
} }
...@@ -3047,9 +3061,17 @@ public class OrderAdapter { ...@@ -3047,9 +3061,17 @@ public class OrderAdapter {
} }
public CreatePrepayRequestDto convertToCreatePrepayRequestDto(String partnerId, String wxAppId, String openId, public CreatePrepayRequestDto convertToCreatePrepayRequestDto(String partnerId, String wxAppId, String openId,
String faceCode, String cardCode, String payCode, QueryOrdersResponse.DataBean.OrderBean fatherOrderBean, String faceCode, String cardCode, String payCode, QueryOrdersResponse.DataBean.OrderBean fatherOrderBean,
QueryOrdersResponse.DataBean.OrderBean productOrderBean, long totalAmount, int cardAmount, OrderExtInfoDto orderExtInfoDTO, QueryOrdersResponse.DataBean.OrderBean productOrderBean, long totalAmount, int cardAmount, OrderExtInfoDto orderExtInfoDTO,
String transId, OrderClientType orderClient){ String transId, OrderClientType orderClient){
return convertToCreatePrepayRequestDto(partnerId, wxAppId, openId, faceCode, cardCode, payCode, fatherOrderBean,
productOrderBean, totalAmount, cardAmount, orderExtInfoDTO, transId, orderClient, null);
}
public CreatePrepayRequestDto convertToCreatePrepayRequestDto(String partnerId, String wxAppId, String openId,
String faceCode, String cardCode, String payCode, QueryOrdersResponse.DataBean.OrderBean fatherOrderBean,
QueryOrdersResponse.DataBean.OrderBean productOrderBean, long totalAmount, int cardAmount, OrderExtInfoDto orderExtInfoDTO,
String transId, OrderClientType orderClient, CreateOrderVo.UnionPayCard unionPayCard){
CreatePrepayRequestDto requestDto = new CreatePrepayRequestDto(); CreatePrepayRequestDto requestDto = new CreatePrepayRequestDto();
requestDto.setPartnerId(partnerId); requestDto.setPartnerId(partnerId);
requestDto.setWxAppId(wxAppId); requestDto.setWxAppId(wxAppId);
...@@ -3064,6 +3086,7 @@ public class OrderAdapter { ...@@ -3064,6 +3086,7 @@ public class OrderAdapter {
requestDto.setOrderExtInfoDTO(orderExtInfoDTO); requestDto.setOrderExtInfoDTO(orderExtInfoDTO);
requestDto.setTransId(transId); requestDto.setTransId(transId);
requestDto.setOrderClient(orderClient); requestDto.setOrderClient(orderClient);
requestDto.setUnionPayCard(unionPayCard);
return requestDto; return requestDto;
} }
...@@ -3074,7 +3097,7 @@ public class OrderAdapter { ...@@ -3074,7 +3097,7 @@ public class OrderAdapter {
createOrderOperateDto.getFatherOrderBean(), createOrderOperateDto.getProductOrderBean(), createOrderOperateDto.getFatherOrderBean(), createOrderOperateDto.getProductOrderBean(),
createOrderOperateDto.getTotalAmount() == null ? 0 : createOrderOperateDto.getTotalAmount(), createOrderOperateDto.getTotalAmount() == null ? 0 : createOrderOperateDto.getTotalAmount(),
createOrderOperateDto.getCardAmount() == null ? 0 : createOrderOperateDto.getCardAmount(), orderExtInfoDTO, createOrderOperateDto.getCardAmount() == null ? 0 : createOrderOperateDto.getCardAmount(), orderExtInfoDTO,
createOrderOperateDto.getFatherOrderBean().getOid(), null); createOrderOperateDto.getFatherOrderBean().getOid(), null, createOrderVo.getUnionPayCard());
} }
/** /**
......
package cn.freemud.entities.dto.order; package cn.freemud.entities.dto.order;
import cn.freemud.entities.vo.CreateOrderVo;
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.request.OrderExtInfoDto; import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse; import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
...@@ -61,4 +62,9 @@ public class CreatePrepayRequestDto { ...@@ -61,4 +62,9 @@ public class CreatePrepayRequestDto {
private String transId; private String transId;
private OrderClientType orderClient; private OrderClientType orderClient;
/**
* 使用电子风味卡
*/
private CreateOrderVo.UnionPayCard unionPayCard;
} }
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
package cn.freemud.entities.vo; package cn.freemud.entities.vo;
import cn.freemud.entities.dto.UserDeliveryInfoDto; import cn.freemud.entities.dto.UserDeliveryInfoDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto; import cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto;
import lombok.Builder; import lombok.Builder;
...@@ -222,6 +223,29 @@ public class CreateOrderVo { ...@@ -222,6 +223,29 @@ public class CreateOrderVo {
private String invoiceTitle; private String invoiceTitle;
/** /**
* 是否使用电子风味卡,如果不为空则为使用
*/
@Valid
@ApiModelProperty(value = "电子风味卡")
private UnionPayCard unionPayCard;
/**
* 电子风味卡
*/
@Data
@ApiModel(value = "电子风味卡", description = "如果传了电子风味卡字段,此类中属性必传")
public static class UnionPayCard {
@NotNull(message = "电子风味卡手机号必传")
@ApiModelProperty(value = "电子风味卡卡号(手机号)",required = true)
private String code;
@NotNull(message = "电子风味卡密码必传")
@ApiModelProperty(value = "电子风味卡密码",required = true)
private String password;
}
/**
* 微信配送地址信息 * 微信配送地址信息
*/ */
private WeixinDeliveryAddressDto weixinDeliveryAddress; private WeixinDeliveryAddressDto weixinDeliveryAddress;
......
...@@ -15,6 +15,10 @@ package cn.freemud.enums; ...@@ -15,6 +15,10 @@ package cn.freemud.enums;
public enum PayChannel { public enum PayChannel {
SVC("10102", "svc卡支付"), SVC("10102", "svc卡支付"),
/**
* union svc pay
*/
USVCP("10556", "电子风味卡支付"),
ALIPAY("10300", "支付宝"), ALIPAY("10300", "支付宝"),
WXPAY("10211", "微信"); WXPAY("10211", "微信");
......
...@@ -142,6 +142,9 @@ import tk.mybatis.mapper.util.StringUtil; ...@@ -142,6 +142,9 @@ import tk.mybatis.mapper.util.StringUtil;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.function.Function; import java.util.function.Function;
...@@ -2165,6 +2168,9 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2165,6 +2168,9 @@ public class OrderServiceImpl implements Orderservice {
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);
} else if (totalAmount > 0 && Objects.nonNull(createPrepayRequestDto.getUnionPayCard())) {
// 电子风味卡支付
orderPayResponse = uSvcPay(createPrepayRequestDto.getFatherOrderBean(), paymentRequest, transId, LogThreadLocal.getTrackingNo(), createPrepayRequestDto.getUnionPayCard());
} else if (totalAmount > 0 && StringUtils.isBlank(cardCode)) { } else if (totalAmount > 0 && StringUtils.isBlank(cardCode)) {
String partnerPayOvertime = this.getPartnerPayOvertime(createPrepayRequestDto.getPartnerId()); String partnerPayOvertime = this.getPartnerPayOvertime(createPrepayRequestDto.getPartnerId());
orderPayResponse = getPreOrderPay(createPrepayRequestDto.getFatherOrderBean(), paymentRequest, LogThreadLocal.getTrackingNo(), createPrepayRequestDto.getCardAmount(), transId, partnerPayOvertime); orderPayResponse = getPreOrderPay(createPrepayRequestDto.getFatherOrderBean(), paymentRequest, LogThreadLocal.getTrackingNo(), createPrepayRequestDto.getCardAmount(), transId, partnerPayOvertime);
...@@ -2184,7 +2190,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2184,7 +2190,7 @@ public class OrderServiceImpl implements Orderservice {
if (baseEditResponse != null) { if (baseEditResponse != null) {
return baseEditResponse; return baseEditResponse;
} }
if (totalAmount > 0 && StringUtils.isBlank(cardCode)) { if (totalAmount > 0 && StringUtils.isBlank(cardCode) && Objects.isNull(createPrepayRequestDto.getUnionPayCard())) {
createOrderResponse.setPaySuccess(false); createOrderResponse.setPaySuccess(false);
} else { } else {
createOrderResponse.setPaySuccess(true); createOrderResponse.setPaySuccess(true);
...@@ -2209,6 +2215,52 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2209,6 +2215,52 @@ public class OrderServiceImpl implements Orderservice {
} }
/** /**
* unionPay card pay
* @param orderBean
* @param paymentRequest
* @param transId
* @param trackingNo
* @param unionPayCard
* @return
*/
private OrderPayResponse uSvcPay(QueryOrdersResponse.DataBean.OrderBean orderBean, PaymentRequest paymentRequest, String transId, String trackingNo, CreateOrderVo.UnionPayCard unionPayCard) {
OrderPayResponse orderPayResponse = new OrderPayResponse();
if (Objects.isNull(unionPayCard) || StringUtils.isBlank(unionPayCard.getCode()) || StringUtils.isBlank(unionPayCard.getPassword())) {
orderPayResponse.setMsg("电子风味卡信息缺失");
return orderPayResponse;
}
CodePayRequest request = new CodePayRequest();
String partnerId = orderBean.getCompanyId();
request.setBody(orderBean.getShopName());
request.setBusinessDate(DateTimeFormatter.ofPattern(DateUtil.FORMAT_YYYY_MM_DD_HHMMSS).format(LocalDateTime.now()));
// paymentRequest 的 payCode可能为null,不保险
request.setPayCode(PayChannel.USVCP.getCode());
// 电子风味卡信息
request.setCode(unionPayCard.getCode());
request.setCardPassword(unionPayCard.getPassword());
request.setPartnerId(partnerId);
request.setStoreId(orderBean.getShopId());
request.setAmount(orderBean.getAmount());
request.setTransId(transId);
request.setStationId("2");
request.setOperatorId("2");
request.setVer("2");
com.freemud.application.sdk.api.base.BaseResponse<CodePayResponse> responseBase = paymentNewService.codePay(request, trackingNo);
if (responseBase == null || !ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(responseBase.getCode()) || responseBase.getData().getData() == null) {
orderPayResponse.setMsg(Objects.isNull(responseBase) ? "电子风味卡支付异常" : responseBase.getMessage());
} else {
CodePayResponse.CodePayDate codePayResponse = responseBase.getData().getData();
orderPayResponse.setFmId(codePayResponse.getFmId());
orderPayResponse.setPayTransId(codePayResponse.getPayTransId());
orderPayResponse.setWxAppid(paymentRequest.getWxAppId());
orderPayResponse.setOpenId(paymentRequest.getOpenId());
orderPayResponse.setPartnerId(orderBean.getCompanyId());
orderPayResponse.setOrderId(orderBean.getOid());
}
return orderPayResponse;
}
/**
* 创建普通订单 * 创建普通订单
*/ */
public CreateOrderResponse createOrder(CreateOrderVo createOrderVo, StoreResponse.BizVO storeResponseDto, ShoppingCartGoodsDto shoppingCartGoodsDto, public CreateOrderResponse createOrder(CreateOrderVo createOrderVo, StoreResponse.BizVO storeResponseDto, ShoppingCartGoodsDto shoppingCartGoodsDto,
...@@ -2595,7 +2647,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2595,7 +2647,7 @@ public class OrderServiceImpl implements Orderservice {
QueryOrdersResponse.DataBean.OrderBean productOrderBean = operateDto.getProductOrderBean(); QueryOrdersResponse.DataBean.OrderBean productOrderBean = operateDto.getProductOrderBean();
//支付-- 包含商品券无需支付、唤起微信支付、储值卡支付直接支付、扫脸支付 //支付-- 包含商品券无需支付、唤起微信支付、储值卡支付直接支付、扫脸支付
OrderPayResponse orderPayResponse = pay(userLoginInfoDto,createOrderVo,totalAmount,cardAmount,fatherOrderBean); OrderPayResponse orderPayResponse = pay(userLoginInfoDto,createOrderVo,totalAmount,cardAmount,fatherOrderBean);
// 默认支付成功必有非码订单号,不管成功与否,orderPayResponse都是不空的.此处是防御式处理 // 默认支付成功必有非码订单号
if (orderPayResponse == null || Objects.isNull(orderPayResponse.getFmId())) { if (orderPayResponse == null || Objects.isNull(orderPayResponse.getFmId())) {
if(createOrderVo.getFaceCode() != null){ if(createOrderVo.getFaceCode() != null){
createOrderVo.setCardCode(createOrderVo.getFaceCode()); createOrderVo.setCardCode(createOrderVo.getFaceCode());
...@@ -2724,6 +2776,10 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2724,6 +2776,10 @@ public class OrderServiceImpl implements Orderservice {
if (totalAmount < 0) { if (totalAmount < 0) {
throw new ServiceException(ResponseResult.PAY_AMOUNT_ERROR); throw new ServiceException(ResponseResult.PAY_AMOUNT_ERROR);
} }
//电子风味卡支付
if (totalAmount > 0 && Objects.nonNull(createOrderVo.getUnionPayCard())) {
return uSvcPay(fatherBeanListOne, paymentRequest, fatherBeanListOne.getOid(), LogThreadLocal.getTrackingNo(), createOrderVo.getUnionPayCard());
}
//唤起微信支付 //唤起微信支付
if (totalAmount > 0 && StringUtils.isBlank(createOrderVo.getCardCode()) && StringUtils.isBlank(createOrderVo.getFaceCode())) { if (totalAmount > 0 && StringUtils.isBlank(createOrderVo.getCardCode()) && StringUtils.isBlank(createOrderVo.getFaceCode())) {
String partnerPayOvertime = this.getPartnerPayOvertime(createOrderVo.getPartnerId()); String partnerPayOvertime = this.getPartnerPayOvertime(createOrderVo.getPartnerId());
......
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