Commit 15efb3ae by vega

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

# 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 1c02d28d 6760c7a0
...@@ -327,7 +327,7 @@ ...@@ -327,7 +327,7 @@
<dependency> <dependency>
<groupId>com.freemud.application.service.sdk</groupId> <groupId>com.freemud.application.service.sdk</groupId>
<artifactId>paymentcenter-sdk</artifactId> <artifactId>paymentcenter-sdk</artifactId>
<version>2.8.RELEASE</version> <version>2.8.1-RELEASE</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.freemud.sdk.api.assortment</groupId> <groupId>com.freemud.sdk.api.assortment</groupId>
......
...@@ -546,7 +546,10 @@ public class OrderAdapter { ...@@ -546,7 +546,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("储值卡支付");
} }
...@@ -602,7 +605,10 @@ public class OrderAdapter { ...@@ -602,7 +605,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("储值卡支付");
} }
...@@ -732,7 +738,10 @@ public class OrderAdapter { ...@@ -732,7 +738,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("储值卡支付");
} }
...@@ -772,7 +781,10 @@ public class OrderAdapter { ...@@ -772,7 +781,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("储值卡支付");
} }
...@@ -1045,6 +1057,9 @@ public class OrderAdapter { ...@@ -1045,6 +1057,9 @@ public class OrderAdapter {
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("银联SVC卡支付");
}
else { else {
responseVo.setOrderPayType("微信支付"); responseVo.setOrderPayType("微信支付");
} }
...@@ -3051,6 +3066,14 @@ public class OrderAdapter { ...@@ -3051,6 +3066,14 @@ public class OrderAdapter {
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);
...@@ -3065,6 +3088,7 @@ public class OrderAdapter { ...@@ -3065,6 +3088,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;
} }
...@@ -3075,7 +3099,7 @@ public class OrderAdapter { ...@@ -3075,7 +3099,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;
...@@ -57,4 +58,9 @@ public class CreatePrepayRequestDto { ...@@ -57,4 +58,9 @@ public class CreatePrepayRequestDto {
private String transId; private String transId;
private OrderClientType orderClient; private OrderClientType orderClient;
/**
* 使用银联礼品卡
*/
private CreateOrderVo.UnionPayCard unionPayCard;
} }
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
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 cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto; import cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Builder; import lombok.Builder;
...@@ -222,6 +224,29 @@ public class CreateOrderVo { ...@@ -222,6 +224,29 @@ public class CreateOrderVo {
private String invoiceTitle; private String invoiceTitle;
/** /**
* 是否使用银联SVC卡,如果不为空则为使用
*/
@Valid
@ApiModelProperty(value = "银联SVC卡")
private UnionPayCard unionPayCard;
/**
* 银联SVC卡
*/
@Data
@ApiModel(value = "银联SVC卡", description = "如果传了银联SVC卡字段,此类中属性必传")
public static class UnionPayCard {
@NotNull(message = "银联SVC卡手机号必传")
@ApiModelProperty(value = "银联SVC卡卡号(手机号)",required = true)
private String code;
@NotNull(message = "银联SVC卡密码必传")
@ApiModelProperty(value = "银联SVC卡密码",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", "银联SVC支付"),
ALIPAY("10300", "支付宝"), ALIPAY("10300", "支付宝"),
WXPAY("10211", "微信"); WXPAY("10211", "微信");
......
...@@ -143,6 +143,9 @@ import tk.mybatis.mapper.util.StringUtil; ...@@ -143,6 +143,9 @@ import tk.mybatis.mapper.util.StringUtil;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal; import java.math.BigDecimal;
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;
...@@ -2159,6 +2162,9 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2159,6 +2162,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);
...@@ -2177,7 +2183,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2177,7 +2183,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);
...@@ -2202,6 +2208,52 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2202,6 +2208,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());
// 银联svc卡信息
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,
...@@ -2579,7 +2631,8 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2579,7 +2631,8 @@ 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);
if (orderPayResponse == null) { // 默认支付成功必有非码订单号
if (orderPayResponse == null || Objects.isNull(orderPayResponse.getFmId())) {
if(createOrderVo.getFaceCode() != null){ if(createOrderVo.getFaceCode() != null){
createOrderVo.setCardCode(createOrderVo.getFaceCode()); createOrderVo.setCardCode(createOrderVo.getFaceCode());
} }
...@@ -2706,6 +2759,10 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2706,6 +2759,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