Commit 532010fe by xiaoer.li@freemud.com

Merge branch 'feature/2020-1104-混合支付' into qa

# Conflicts:
#	assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/adapter/OrderSdkAdapter.java
#	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 214b3040 8875579c
...@@ -1174,8 +1174,6 @@ public class OrderSdkAdapter { ...@@ -1174,8 +1174,6 @@ public class OrderSdkAdapter {
if (CollectionUtils.isNotEmpty(orderInfoReqs.getOrderPayItemCreateReqList())) { if (CollectionUtils.isNotEmpty(orderInfoReqs.getOrderPayItemCreateReqList())) {
data.setOrderPayItem(this.getOrderItemPayList(orderInfoReqs.getOrderPayItemCreateReqList())); data.setOrderPayItem(this.getOrderItemPayList(orderInfoReqs.getOrderPayItemCreateReqList()));
} }
data.setPayChannelType(orderInfoReqs.getPayChannelType());
//data.setOrderPayItemCreateReqList(orderInfoReqs.getOrderPayItemCreateReqList());
return data; return data;
} }
...@@ -1626,9 +1624,6 @@ public class OrderSdkAdapter { ...@@ -1626,9 +1624,6 @@ public class OrderSdkAdapter {
activityUpdateStockRequest.setPartnerCode(orderBean.getCompanyId()); activityUpdateStockRequest.setPartnerCode(orderBean.getCompanyId());
activityUpdateStockRequest.setStoreId(orderBean.getShopId()); activityUpdateStockRequest.setStoreId(orderBean.getShopId());
activityUpdateStockRequest.setVer("1"); activityUpdateStockRequest.setVer("1");
// add by miaohui 20201030 for 【ID1018638】【C端服务端】活动库存接口调整对接
activityUpdateStockRequest.setUserId(orderBean.getUserId());
activityUpdateStockRequest.setOrderCreateTime(DateUtil.getCurrentDate(DateUtil.FORMAT_yyyyMMdd_date));
return activityUpdateStockRequest; return activityUpdateStockRequest;
} }
......
...@@ -168,7 +168,6 @@ public class BaseCreateOrderRequest extends BaseConfig { ...@@ -168,7 +168,6 @@ public class BaseCreateOrderRequest extends BaseConfig {
* 收货地址Id * 收货地址Id
*/ */
private String receiveId; private String receiveId;
private List<OrderPayItemCreateReq> orderPayItemCreateReqList;
@Data @Data
public static class DeliveryTypeInfo { public static class DeliveryTypeInfo {
/** /**
......
...@@ -319,8 +319,6 @@ public class OrderAdapter { ...@@ -319,8 +319,6 @@ public class OrderAdapter {
} }
createOrderDto.setActivityUpdateStockRequest(activityUpdateStockRequest); createOrderDto.setActivityUpdateStockRequest(activityUpdateStockRequest);
createOrderDto.setPayChannelType(createOrderVo.getPayChannelType()); createOrderDto.setPayChannelType(createOrderVo.getPayChannelType());
createOrderDto.setOrderPayItemCreateReqList(createOrderVo.getOrderPayItemCreateReqList());
// createOrderDto.setOtherInfo(getOrderOtherInfo(shoppingCartGoodsDto));
return createOrderDto; return createOrderDto;
} }
...@@ -3423,9 +3421,8 @@ public class OrderAdapter { ...@@ -3423,9 +3421,8 @@ public class OrderAdapter {
, null , null
, createOrderVo.getUnionPayCard() , createOrderVo.getUnionPayCard()
, createOrderVo.getShopId() , createOrderVo.getShopId()
, createOrderVo.getOrderPayItemCreateReqList() , createOrderVo.getChannel()
, createOrderVo.getCashAmount() );
, createOrderVo.getSvcAmount());
} }
public CreatePrepayRequestDto convertToCreatePrepayRequestDto(String partnerId public CreatePrepayRequestDto convertToCreatePrepayRequestDto(String partnerId
, String wxAppId, String openId , String wxAppId, String openId
...@@ -3437,13 +3434,11 @@ public class OrderAdapter { ...@@ -3437,13 +3434,11 @@ public class OrderAdapter {
, long totalAmount , long totalAmount
, int cardAmount , int cardAmount
, OrderExtInfoDto orderExtInfoDTO , OrderExtInfoDto orderExtInfoDTO
,String transId , String transId
, OrderClientType orderClient , OrderClientType orderClient
, CreateOrderVo.UnionPayCard unionPayCard , CreateOrderVo.UnionPayCard unionPayCard
, String storeId , String storeId
, List<OrderPayItemCreateReq> payItem , String channel){
, BigDecimal cashAmount
, BigDecimal svcAmount){
CreatePrepayRequestDto requestDto = new CreatePrepayRequestDto(); CreatePrepayRequestDto requestDto = new CreatePrepayRequestDto();
requestDto.setPartnerId(partnerId); requestDto.setPartnerId(partnerId);
requestDto.setWxAppId(wxAppId); requestDto.setWxAppId(wxAppId);
...@@ -3460,9 +3455,7 @@ public class OrderAdapter { ...@@ -3460,9 +3455,7 @@ public class OrderAdapter {
requestDto.setOrderClient(orderClient); requestDto.setOrderClient(orderClient);
requestDto.setUnionPayCard(unionPayCard); requestDto.setUnionPayCard(unionPayCard);
requestDto.setStoreId(storeId); requestDto.setStoreId(storeId);
requestDto.setOrderPayItemCreateReqList(payItem); requestDto.setChannel(channel);
requestDto.setCashAmount(cashAmount);
requestDto.setSvcAmount(svcAmount);
return requestDto; return requestDto;
} }
...@@ -3619,28 +3612,34 @@ public class OrderAdapter { ...@@ -3619,28 +3612,34 @@ public class OrderAdapter {
* @param partnerPayOvertime * @param partnerPayOvertime
* @return * @return
*/ */
public CombPayRequest convent2CombPayOrderRequest(PaymentRequest paymentRequest public CombPayRequest convent2CombPayOrderRequest(String cardNo
, CreatePrepayRequestDto createPrepayRequestDto , QueryOrdersResponse.DataBean.OrderBean orderBean
, String partnerPayOvertime,String orderClient) { , PaymentRequest paymentRequest
, String partnerPayOvertime
, String orderClient
, String channel
, Integer totalAmount
, Integer svcAmount
, Integer svcVAmount) {
CombPayRequest orderPayDto = new CombPayRequest(); CombPayRequest orderPayDto = new CombPayRequest();
orderPayDto.setEbCode(paymentRequest.getPayCode()); orderPayDto.setEbCode(paymentRequest.getPayCode());
orderPayDto.setPartner_id(createPrepayRequestDto.getPartnerId()); orderPayDto.setPartner_id(orderBean.getCompanyId());
orderPayDto.setBody(paymentRequest.getPrincipalName()); orderPayDto.setBody(paymentRequest.getPrincipalName());
orderPayDto.setNotify_url(paymentRequest.getReverseNotifyiDcUrl()); orderPayDto.setNotify_url(paymentRequest.getReverseNotifyiDcUrl());
orderPayDto.setStore_id(createPrepayRequestDto.getStoreId()); orderPayDto.setStore_id(orderBean.getShopId());
orderPayDto.setOpen_id(paymentRequest.getOpenId()); orderPayDto.setOpen_id(paymentRequest.getOpenId());
String businessDate = com.freemud.application.sdk.api.util.DateUtil.convert2String(new Date(), "yyyyMMdd"); String businessDate = com.freemud.application.sdk.api.util.DateUtil.convert2String(new Date(), "yyyyMMdd");
orderPayDto.setBusiness_date(businessDate); orderPayDto.setBusiness_date(businessDate);
orderPayDto.setAmount(createPrepayRequestDto.getTotalAmount()); orderPayDto.setAmount(totalAmount.longValue());
orderPayDto.setVip_amount(0L); orderPayDto.setVip_amount(0L);
orderPayDto.setAppId(paymentRequest.getWxAppId()); orderPayDto.setAppId(paymentRequest.getWxAppId());
orderPayDto.setPayCode(paymentRequest.getPayCode()); orderPayDto.setPayCode(paymentRequest.getPayCode());
orderPayDto.setVer("V1"); orderPayDto.setVer("V1");
orderPayDto.setPayTimeOutTime(StringUtils.defaultIfBlank(partnerPayOvertime, "30")); orderPayDto.setPayTimeOutTime(StringUtils.defaultIfBlank(partnerPayOvertime, "30"));
List<ProductVO> productVOS = new ArrayList<ProductVO>(); List<ProductVO> productVOS = new ArrayList<ProductVO>();
if (CollectionUtils.isNotEmpty(createPrepayRequestDto.getFatherOrderBean().getProductList())) { if (CollectionUtils.isNotEmpty(orderBean.getProductList())) {
for (QueryOrdersResponse.DataBean.OrderBean.ProductBean product : createPrepayRequestDto.getFatherOrderBean().getProductList()) { for (QueryOrdersResponse.DataBean.OrderBean.ProductBean product : orderBean.getProductList()) {
ProductVO productBean = new ProductVO(); ProductVO productBean = new ProductVO();
productBean.setId(product.getProductId()); productBean.setId(product.getProductId());
productBean.setQuantity(product.getNumber()); productBean.setQuantity(product.getNumber());
...@@ -3653,29 +3652,26 @@ public class OrderAdapter { ...@@ -3653,29 +3652,26 @@ public class OrderAdapter {
} }
orderPayDto.setProducts(productVOS); orderPayDto.setProducts(productVOS);
List<PayPlatformVO> platforms = new ArrayList<>(); List<PayPlatformVO> platforms = new ArrayList<>();
if(null != createPrepayRequestDto.getOrderPayItemCreateReqList() && createPrepayRequestDto.getOrderPayItemCreateReqList().size()>0){ Long svc = svcAmount.longValue()+svcVAmount.longValue();
for (OrderPayItemCreateReq orderPayItemCreateReq : createPrepayRequestDto.getOrderPayItemCreateReqList()) { PayPlatformVO payPlatformVO = new PayPlatformVO();
PayPlatformVO payPlatformVO = new PayPlatformVO(); payPlatformVO.setClientCode(PayChannelType.SVC.getEbcode());
payPlatformVO.setAmount(orderPayItemCreateReq.getPayAmount().longValue()); payPlatformVO.setEbcode(PayChannelType.SVC.getEbcode());
payPlatformVO.setEbcode(orderPayItemCreateReq.getPayEbCode()); payPlatformVO.setAmount(svc);
if (orderPayItemCreateReq.getPayEbCode().equals(PayChannelType.SVC.getEbcode())) { platforms.add(payPlatformVO);
payPlatformVO.setClientCode(orderPayItemCreateReq.getPayEbCode());
} String ebcode = PayChannelType.getByIndex(Byte.parseByte(channel)).getEbcode();
else if (orderPayItemCreateReq.getPayEbCode().equals(PayChannelType.WECHAT.getEbcode())) { payPlatformVO = new PayPlatformVO();
payPlatformVO.setClientCode(orderClient); payPlatformVO.setAmount(totalAmount.longValue() - svc);
} payPlatformVO.setClientCode(orderClient);
else if (orderPayItemCreateReq.getPayEbCode().equals(PayChannelType.ALIPAY.getEbcode())) { payPlatformVO.setEbcode(ebcode);
payPlatformVO.setClientCode(orderClient); platforms.add(payPlatformVO);
}
platforms.add(payPlatformVO);
}
}
orderPayDto.setPlatforms(platforms); orderPayDto.setPlatforms(platforms);
orderPayDto.setOut_order_no(createPrepayRequestDto.getFatherOrderBean().getOid()); orderPayDto.setOut_order_no(orderBean.getOid());
orderPayDto.setCardCode(createPrepayRequestDto.getCardCode()); orderPayDto.setCardCode(cardNo);
return orderPayDto; return orderPayDto;
}
}
/** /**
* 混合支付返回的支付参数 * 混合支付返回的支付参数
* @param payPlatforms * @param payPlatforms
...@@ -3710,6 +3706,7 @@ public class OrderAdapter { ...@@ -3710,6 +3706,7 @@ public class OrderAdapter {
PayItem payItem = new PayItem(); PayItem payItem = new PayItem();
payItem.setFmTradeNo(pt.getFmTradeNo()); payItem.setFmTradeNo(pt.getFmTradeNo());
payItem.setPayChannelType(PayChannelType.getByEbcode(pt.getEbCode()).getIndex().intValue()); payItem.setPayChannelType(PayChannelType.getByEbcode(pt.getEbCode()).getIndex().intValue());
//payItem.setPayChannelName(PayChannelType.getByEbcode(pt.getEbCode()).getName());
payItem.setTransId(pt.getTransId()); payItem.setTransId(pt.getTransId());
payItem.setPartnerId(partnerId); payItem.setPartnerId(partnerId);
responseDto.getPayItem().add(payItem); responseDto.getPayItem().add(payItem);
......
...@@ -71,15 +71,6 @@ public class CreatePrepayRequestDto { ...@@ -71,15 +71,6 @@ public class CreatePrepayRequestDto {
* 使用电子风味卡 * 使用电子风味卡
*/ */
private CreateOrderVo.UnionPayCard unionPayCard; private CreateOrderVo.UnionPayCard unionPayCard;
private List<OrderPayItemCreateReq> orderPayItemCreateReqList;
/**
* svc支付金额
*/
private BigDecimal svcAmount;
/**
* 现金支付金额
*/
private BigDecimal cashAmount;
private String storeId; private String storeId;
private String channel;
} }
...@@ -32,8 +32,6 @@ import java.util.List; ...@@ -32,8 +32,6 @@ import java.util.List;
@Data @Data
public class CreateOrderVo { public class CreateOrderVo {
private List<OrderPayItemCreateReq> orderPayItemCreateReqList;
@NotEmpty(message = "sessionId 不能为空") @NotEmpty(message = "sessionId 不能为空")
private String sessionId; private String sessionId;
...@@ -251,15 +249,6 @@ public class CreateOrderVo { ...@@ -251,15 +249,6 @@ public class CreateOrderVo {
@Valid @Valid
@ApiModelProperty(value = "电子风味卡") @ApiModelProperty(value = "电子风味卡")
private UnionPayCard unionPayCard; private UnionPayCard unionPayCard;
/**
* svc支付金额
*/
private BigDecimal svcAmount;
/**
* 现金支付金额
*/
private BigDecimal cashAmount;
/** /**
* 电子风味卡 * 电子风味卡
*/ */
......
...@@ -739,47 +739,4 @@ public class CheckOrder { ...@@ -739,47 +739,4 @@ public class CheckOrder {
// throw new ServiceException(ResponseResult.STORE_ITEM_STOP_BUSINESS); // throw new ServiceException(ResponseResult.STORE_ITEM_STOP_BUSINESS);
// } // }
} }
/**
* 混合支付
* @param createOrderVo
* @param shoppingCartGoodsDto
* @param trackingNo
* @return
*/
public boolean checkSvcPay(CreateOrderVo createOrderVo,ShoppingCartGoodsDto shoppingCartGoodsDto,String trackingNo) {
if (StringUtils.isBlank(createOrderVo.getCardCode())) {
return false;
}
//这么不合规的粗暴搞法 设置支付方式
PayChannelType payType = PayChannelType.getByIndex(Byte.parseByte(createOrderVo.getChannel()));
createOrderVo.setPayChannelType(payType.getIndex());
SVCCardAmountRequest request = new SVCCardAmountRequest();
request.setPartnerId(createOrderVo.getPartnerId());
request.setCardCodes(Arrays.asList(createOrderVo.getCardCode()));
BaseResponse<SVCCardAmountResponse> svcCardAmount = paymentNewService.querySVCCardAmount(request, trackingNo);
if (svcCardAmount==null || svcCardAmount.getData()==null ||!ResponseResult.SUCCESS.getCode().equals(svcCardAmount.getCode())) {
throw new ServiceException(ResponseResult.USER_SVC_CARD_ERROR);
}
Integer svcAmount = 0 ;
Integer svcVAmount = 0 ;
Long totalVAmount = shoppingCartGoodsDto.getTotalAmount() +shoppingCartGoodsDto.getPackageAmount();
if (svcCardAmount.getData().getData().getCardSimpleInfos().size()>0) {
svcAmount = svcCardAmount.getData().getData().getCardSimpleInfos().get(0).getAmount();
svcVAmount = svcCardAmount.getData().getData().getCardSimpleInfos().get(0).getVamount();
//todo : svc卡的金额小于订单金额
if(svcAmount + svcVAmount >0 && totalVAmount> svcAmount + svcVAmount){
BigDecimal total = new BigDecimal(totalVAmount);
BigDecimal svcAmounts = new BigDecimal(svcAmount + svcVAmount);
BigDecimal cashAmout = total.subtract(svcAmounts);
createOrderVo.setOrderPayItemCreateReqList(orderAdapter.setOrderPayItem(cashAmout,svcAmounts,Byte.parseByte(createOrderVo.getChannel())));
createOrderVo.setPayChannelType(PayChannelType.COMB.getIndex());
createOrderVo.setCashAmount(cashAmout);
createOrderVo.setSvcAmount(svcAmounts);
return true;
}
}
return false;
}
} }
...@@ -335,7 +335,6 @@ public class OrderServiceImpl implements Orderservice { ...@@ -335,7 +335,6 @@ public class OrderServiceImpl implements Orderservice {
Integer pushOrderTime = checkOrder.checkOrderByOrderType(createOrderVo, userLoginInfoDto, storeResponseDto, shoppingCartGoodsDto, trackingNo); Integer pushOrderTime = checkOrder.checkOrderByOrderType(createOrderVo, userLoginInfoDto, storeResponseDto, shoppingCartGoodsDto, trackingNo);
OrderExtInfoDto extInfo = getExtInfo(userLoginInfoDto, storeResponseDto, pushOrderTime, createOrderVo, shoppingCartGoodsDto); OrderExtInfoDto extInfo = getExtInfo(userLoginInfoDto, storeResponseDto, pushOrderTime, createOrderVo, shoppingCartGoodsDto);
boolean svcPay = checkOrder.checkSvcPay(createOrderVo, shoppingCartGoodsDto, trackingNo);
//1.9.2套餐需求同步优化创建订单代码 //1.9.2套餐需求同步优化创建订单代码
BaseResponse createOrderOperateDtoResponse = this.sdkCreateOrder(createOrderVo, storeResponseDto, shoppingCartGoodsDto, userLoginInfoDto); BaseResponse createOrderOperateDtoResponse = this.sdkCreateOrder(createOrderVo, storeResponseDto, shoppingCartGoodsDto, userLoginInfoDto);
if(createOrderOperateDtoResponse == null || !ResponseResult.SUCCESS.getCode().equals(createOrderOperateDtoResponse.getCode()) || createOrderOperateDtoResponse.getResult() == null ) { if(createOrderOperateDtoResponse == null || !ResponseResult.SUCCESS.getCode().equals(createOrderOperateDtoResponse.getCode()) || createOrderOperateDtoResponse.getResult() == null ) {
...@@ -344,13 +343,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -344,13 +343,7 @@ public class OrderServiceImpl implements Orderservice {
CreateOrderOperateDto createOrderOperateDto = (CreateOrderOperateDto)createOrderOperateDtoResponse.getResult(); CreateOrderOperateDto createOrderOperateDto = (CreateOrderOperateDto)createOrderOperateDtoResponse.getResult();
//创建支付 //创建支付
CreatePrepayRequestDto createPrepayRequestDto = orderAdapter.convertToCreatePrepayRequestDto(userLoginInfoDto, createOrderVo, createOrderOperateDto, extInfo); CreatePrepayRequestDto createPrepayRequestDto = orderAdapter.convertToCreatePrepayRequestDto(userLoginInfoDto, createOrderVo, createOrderOperateDto, extInfo);
if (svcPay) { return this.createPrepayOrder(createPrepayRequestDto);
return this.createCombpayOrder(createPrepayRequestDto);
}
else {
return this.createPrepayOrder(createPrepayRequestDto);
}
} }
/** /**
...@@ -2284,9 +2277,10 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2284,9 +2277,10 @@ public class OrderServiceImpl implements Orderservice {
} 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, createPrepayRequestDto.getOrderExtInfoDTO()); orderPayResponse = getPreOrderPay(createPrepayRequestDto.getFatherOrderBean(), paymentRequest, LogThreadLocal.getTrackingNo(), createPrepayRequestDto.getCardAmount(), transId, partnerPayOvertime, createPrepayRequestDto.getOrderExtInfoDTO());
} else if (totalAmount > 0 && StringUtils.isNotBlank(cardCode)) { }
//svc卡支付 //混合支付+svc卡
orderPayResponse = svcPay(cardCode, createPrepayRequestDto.getFatherOrderBean(), paymentRequest, transId, LogThreadLocal.getTrackingNo()); else if (totalAmount > 0 && StringUtils.isNotBlank(cardCode)) {
orderPayResponse = switchSvcOrComb(totalAmount,cardCode, createPrepayRequestDto.getFatherOrderBean(), paymentRequest, transId, createPrepayRequestDto.getChannel(),createPrepayRequestDto.getStoreId(),LogThreadLocal.getTrackingNo());
} else { } else {
// 0元订单如果不需要支付,自定义支付单号 // 0元订单如果不需要支付,自定义支付单号
orderPayResponse = getOrderPayResponse(paymentRequest, createPrepayRequestDto.getFatherOrderBean()); orderPayResponse = getOrderPayResponse(paymentRequest, createPrepayRequestDto.getFatherOrderBean());
...@@ -2332,6 +2326,51 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2332,6 +2326,51 @@ public class OrderServiceImpl implements Orderservice {
} }
} }
private OrderPayResponse switchSvcOrComb(Long totalAmount
, String cardCode
, QueryOrdersResponse.DataBean.OrderBean orderBean
, PaymentRequest paymentRequest
, String transId
, String channel
, String storeId
, String trackingNo) {
OrderPayResponse orderPayResponse = new OrderPayResponse();
SVCCardAmountRequest svcRequest = new SVCCardAmountRequest();
svcRequest.setPartnerId(orderBean.getCompanyId());
svcRequest.setCardCodes(Arrays.asList(cardCode));
//查询svc卡余额
com.freemud.application.sdk.api.base.BaseResponse<SVCCardAmountResponse> svcCardAmount = paymentNewService.querySVCCardAmount(svcRequest, trackingNo);
if (svcCardAmount == null
|| !ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(svcCardAmount.getCode())
|| svcCardAmount.getData().getData() == null
|| CollectionUtils.isEmpty(svcCardAmount.getData().getData().getCardSimpleInfos())) {
orderPayResponse.setMsg(Objects.isNull(svcCardAmount) ? "获取svc卡余额异常" : svcCardAmount.getMessage());
return orderPayResponse;
}
// 校验金额
Integer svcAmount = svcCardAmount.getData().getData().getCardSimpleInfos().get(0).getAmount() ;
Integer svcVAmount = svcCardAmount.getData().getData().getCardSimpleInfos().get(0).getVamount() ;
boolean tigger = false;
//todo : svc卡的金额小于订单金额
if(svcAmount + svcVAmount >0 && totalAmount> svcAmount + svcVAmount){
tigger = true;
}
//混合支付
if (tigger) {
log.info("混合支付:");
String partnerPayOvertime = this.getPartnerPayOvertime(orderBean.getCompanyId());
orderPayResponse = comPayOrder(cardCode,orderBean,paymentRequest,partnerPayOvertime,totalAmount.intValue(), svcAmount,svcVAmount,channel,storeId,LogThreadLocal.getTrackingNo());
}
//svc 支付
else {
log.info("svc卡支付");
orderPayResponse = svcPay(cardCode, orderBean, paymentRequest, transId, trackingNo);
}
return orderPayResponse;
}
/** /**
* unionPay card pay * unionPay card pay
* @param orderBean * @param orderBean
...@@ -2513,7 +2552,6 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2513,7 +2552,6 @@ public class OrderServiceImpl implements Orderservice {
svcRequest.setPartnerId(partnerId); svcRequest.setPartnerId(partnerId);
svcRequest.setCardCodes(Arrays.asList(cardCode)); svcRequest.setCardCodes(Arrays.asList(cardCode));
//查询svc卡余额 //查询svc卡余额
log.info("svc支付:{}",transId);
com.freemud.application.sdk.api.base.BaseResponse<SVCCardAmountResponse> svcCardAmountResponseBaseResponse = paymentNewService.querySVCCardAmount(svcRequest, trackingNo); com.freemud.application.sdk.api.base.BaseResponse<SVCCardAmountResponse> svcCardAmountResponseBaseResponse = paymentNewService.querySVCCardAmount(svcRequest, trackingNo);
if (svcCardAmountResponseBaseResponse == null || !ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(svcCardAmountResponseBaseResponse.getCode()) if (svcCardAmountResponseBaseResponse == null || !ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(svcCardAmountResponseBaseResponse.getCode())
|| svcCardAmountResponseBaseResponse.getData().getData() == null || CollectionUtils.isEmpty(svcCardAmountResponseBaseResponse.getData().getData().getCardSimpleInfos())) { || svcCardAmountResponseBaseResponse.getData().getData() == null || CollectionUtils.isEmpty(svcCardAmountResponseBaseResponse.getData().getData().getCardSimpleInfos())) {
...@@ -2676,9 +2714,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2676,9 +2714,7 @@ public class OrderServiceImpl implements Orderservice {
JSONObject.toJSONString(orderExtInfo)); JSONObject.toJSONString(orderExtInfo));
orderEditRequest.setOrderId(orderBean.getOid()); orderEditRequest.setOrderId(orderBean.getOid());
orderEditRequest.setTrackingNo(trackingNo); orderEditRequest.setTrackingNo(trackingNo);
/** //混合支付项
* 混合支付项
*/
if (CollectionUtils.isNotEmpty(orderPayResponse.getPayItem())) { if (CollectionUtils.isNotEmpty(orderPayResponse.getPayItem())) {
orderEditRequest.setOrderPayItem(orderPayResponse.getPayItem()); orderEditRequest.setOrderPayItem(orderPayResponse.getPayItem());
} }
...@@ -3184,157 +3220,80 @@ public class OrderServiceImpl implements Orderservice { ...@@ -3184,157 +3220,80 @@ public class OrderServiceImpl implements Orderservice {
} }
/** /**
* 创建混合支付预支付
*/
public BaseResponse createCombpayOrder(CreatePrepayRequestDto createPrepayRequestDto) {
CreateOrderResponseVo createOrderResponse;
OrderPayResponse orderPayResponse = null;
PaymentRequest paymentRequest = orderBodyConvertToPaymentBody(createPrepayRequestDto.getOpenId()
, createPrepayRequestDto.getPartnerId()
, createPrepayRequestDto.getWxAppId()
, null);
long totalAmount = createPrepayRequestDto.getTotalAmount();
String cardCode = createPrepayRequestDto.getCardCode();
if (totalAmount < 0) {
throw new ServiceException(ResponseResult.PAY_AMOUNT_ERROR);
}
String partnerPayOvertime = this.getPartnerPayOvertime(createPrepayRequestDto.getPartnerId());
orderPayResponse = comPayOrder(paymentRequest,createPrepayRequestDto,partnerPayOvertime,LogThreadLocal.getTrackingNo());
if (orderPayResponse == null || Objects.isNull(orderPayResponse.getFmId())) {
log.info("混合支付返回:{}",JSON.toJSONString(orderPayResponse));
return failCombPreOrderPay(LogThreadLocal.getTrackingNo()
, createPrepayRequestDto.getProductOrderBean()
, cardCode
, createPrepayRequestDto.getOrderClient()
, Objects.isNull(orderPayResponse) ? null : orderPayResponse.getMsg());
}
createOrderResponse = orderAdapter.convent2CreateFatherSonOrderResponseVo(orderPayResponse, createPrepayRequestDto.getProductOrderBean());
BaseResponse baseEditResponse = this.updateOrderInfo(orderPayResponse, createPrepayRequestDto.getOrderExtInfoDTO(), createPrepayRequestDto.getProductOrderBean(), LogThreadLocal.getTrackingNo());
if (baseEditResponse != null) {
return baseEditResponse;
}
/*
if (totalAmount > 0 && StringUtils.isBlank(cardCode)) {
createOrderResponse.setPaySuccess(false);
} else {
createOrderResponse.setPaySuccess(true);
}
*/
createOrderResponse.setPaySuccess(false);
// 推荐优惠插件用户下单数据上报
if (!createOrderResponse.getPaySuccess()) {
return ResponseUtil.success(createOrderResponse);
} else {
//如果是商品券支付0元,调用回调接口
PaysuccessNoticeMessage message = new PaysuccessNoticeMessage();
message.setResult_code(100);
message.setOut_trade_no(createOrderResponse.getFmId());
message.setTrans_id(createOrderResponse.getOid());
message.setTotal_fee(0);
message.setOpenid(createPrepayRequestDto.getOpenId());
message.setPlatform_coupon(0);
message.setMerchant_coupon(0);
orderAdapterService.paySuccessCallback(message);
return ResponseUtil.success(createOrderResponse);
}
}
/**
* 创建混合支付 * 创建混合支付
* @param orderBean
* @param paymentRequest * @param paymentRequest
* @param createPrepayRequestDto
* @param partnerPayOvertime * @param partnerPayOvertime
* @param totalAmount
* @param svcAmount
* @param svcVAmount
* @param channel
* @param storeId
* @param trackingNo
* @return * @return
*/ */
private OrderPayResponse comPayOrder(PaymentRequest paymentRequest public OrderPayResponse comPayOrder(String cardNo
, CreatePrepayRequestDto createPrepayRequestDto , QueryOrdersResponse.DataBean.OrderBean orderBean
, PaymentRequest paymentRequest
, String partnerPayOvertime , String partnerPayOvertime
, Integer totalAmount
, Integer svcAmount
, Integer svcVAmount
, String channel
, String storeId
, String trackingNo) { , String trackingNo) {
OrderPayResponse orderPayResponse = null; String ebCode = this.getPayCodeByChanel(paymentRequest.getWxAppId(), channel, storeId);
CombPayResponse responseBase = null; OrderPayResponse orderPayResponse = new OrderPayResponse();;
CombPayRequest combPayRequest = null; if (StringUtils.isBlank(ebCode)) {
CombPayResponse.PayPlatform payPlatform = null; orderPayResponse.setMsg("渠道码没有配置");
log.info("混合支付..."); return orderPayResponse;
try { }
String orderClient = this.getPayCodeByChanel(createPrepayRequestDto);
if (StringUtils.isBlank(orderClient)) {
orderPayResponse = new OrderPayResponse();
orderPayResponse.setMsg("渠道码没有配置");
return orderPayResponse;
}
combPayRequest = orderAdapter.convent2CombPayOrderRequest(paymentRequest,createPrepayRequestDto,partnerPayOvertime,orderClient);
responseBase = comPayClient.combPay(combPayRequest,combPayRequest.getPartner_id());
if (!ResponseCodeConstant.PAYMENT_RESPONSE_SUCCESS.equals(responseBase.getCode())|| responseBase.getData().getPayPlatformResponseList().size()==0) {
log.info("混合支付返回信息错误,trackingNo:{} request:{} response:{}",trackingNo, JSONObject.toJSONString(combPayRequest), JSONObject.toJSONString(responseBase));
orderPayResponse = new OrderPayResponse();
orderPayResponse.setMsg(responseBase.getMsg());
}
else {
log.info("混合支付请求request:{},response:{}",JSON.toJSONString(combPayRequest),JSON.toJSONString(responseBase));
/**
* 生成预支付参数
*/
payPlatform = responseBase.getData().getPayPlatformResponseList()
.stream()
.filter(f -> !PayChannelType.SVC.getEbcode().equals(f.getEbCode())).findFirst()
.orElse(null);
if(payPlatform==null) {
orderPayResponse = new OrderPayResponse();
orderPayResponse.setMsg("提取现金支付失败");
}
else {
orderPayResponse = orderAdapter.convent2OrderCombPayResponse(responseBase.getData().getPayPlatformResponseList(),createPrepayRequestDto.getPartnerId());
orderPayResponse.setOpenId(paymentRequest.getOpenId());
orderPayResponse.setWxAppid(paymentRequest.getWxAppId());
orderPayResponse.setPartnerId(createPrepayRequestDto.getPartnerId());
orderPayResponse.setOrderId(createPrepayRequestDto.getTransId());
//隐射关系
redisCache.save(RedisUtil.getPaymentTransIdOrderKey(payPlatform.getTransId()),createPrepayRequestDto.getTransId(),1L,TimeUnit.DAYS);
//加入轮训队列
putDelMq(createPrepayRequestDto.getPartnerId()
, createPrepayRequestDto.getStoreId()
, orderPayResponse.getFmId()
, createPrepayRequestDto.getTransId()
, PayChannelType.getByEbcode(payPlatform.getEbCode()).getIndex().intValue());
} CombPayRequest combPayRequest = orderAdapter.convent2CombPayOrderRequest(cardNo, orderBean, paymentRequest, partnerPayOvertime, ebCode, channel, totalAmount, svcAmount, svcVAmount);
} CombPayResponse combPayResponse = comPayClient.combPay(combPayRequest, combPayRequest.getPartner_id());
if (!ResponseCodeConstant.PAYMENT_RESPONSE_SUCCESS.equals(combPayResponse.getCode())|| combPayResponse.getData().getPayPlatformResponseList().size()==0) {
log.info("混合支付返回信息错误,trackingNo:{} request:{} response:{}",trackingNo, JSONObject.toJSONString(combPayRequest), JSONObject.toJSONString(combPayResponse));
orderPayResponse.setMsg(combPayResponse.getMsg());
return orderPayResponse;
} }
catch (Exception e) { //生成预支付参数
log.info("混合支付异常..."); CombPayResponse.PayPlatform payPlatform = combPayResponse.getData().getPayPlatformResponseList()
//TODO 邮件告警 .stream()
LogUtil.error("comPay_error", JSONObject.toJSONString(responseBase), JSONObject.toJSONString(paymentRequest), e); .filter(f -> !PayChannelType.SVC.getEbcode().equals(f.getEbCode())).findFirst()
orderPayResponse = new OrderPayResponse(); .orElse(null);
orderPayResponse.setMsg("comPay_error"); if(payPlatform==null) {
orderPayResponse.setMsg("支付:现金支付错误");
return orderPayResponse;
} }
orderPayResponse = orderAdapter.convent2OrderCombPayResponse(combPayResponse.getData().getPayPlatformResponseList(),orderBean.getCompanyId());
orderPayResponse.setOpenId(paymentRequest.getOpenId());
orderPayResponse.setWxAppid(paymentRequest.getWxAppId());
orderPayResponse.setPartnerId(orderBean.getCompanyId());
orderPayResponse.setOrderId(orderBean.getOid());
//隐射关系
redisCache.save(RedisUtil.getPaymentTransIdOrderKey(payPlatform.getTransId()),orderBean.getOid(),1L,TimeUnit.DAYS);
//加入轮训队列
putDelMq(orderBean.getCompanyId(),storeId, orderPayResponse.getFmId(), orderBean.getOid(), PayChannelType.getByEbcode(payPlatform.getEbCode()).getIndex().intValue());
return orderPayResponse; return orderPayResponse;
} }
/** /**
* 通过payCode ->clientCode * 通过payCode ->clientCode
* @param createPrepayRequestDto * @param wxAppid
* @param channel
* @param storeId
* @return * @return
*/ */
private String getPayCodeByChanel(CreatePrepayRequestDto createPrepayRequestDto) { private String getPayCodeByChanel(String wxAppid,String channel,String storeId) {
if (CollectionUtils.isEmpty(createPrepayRequestDto.getOrderPayItemCreateReqList())) return ""; if (StringUtils.isBlank(channel)) return "";
OrderPayItemCreateReq payItem = createPrepayRequestDto.getOrderPayItemCreateReqList() PayChannelType byIndex = PayChannelType.getByIndex(Byte.parseByte(channel));
.stream() if (byIndex.getEbcode() == null) return "";
.filter(d -> !d.getPayEbCode().equals(PayChannelType.SVC.getEbcode())) AssortmentOpenPlatformIappWxappStore wxAppStore = assortmentOpenPlatformIappWxappStoreManager.selectWxappStoreByWxAppIdAndStoreId(wxAppid
.findFirst() , storeId
.orElse(null); , byIndex.getEbcode());
if (payItem == null) return "";
AssortmentOpenPlatformIappWxappStore wxAppStore = assortmentOpenPlatformIappWxappStoreManager.selectWxappStoreByWxAppIdAndStoreId(createPrepayRequestDto.getWxAppId()
, createPrepayRequestDto.getStoreId()
, payItem.getPayEbCode());
if (StringUtils.isNotBlank(wxAppStore.getClientCode())) { if (StringUtils.isNotBlank(wxAppStore.getClientCode())) {
return wxAppStore.getClientCode(); return wxAppStore.getClientCode();
} }
......
...@@ -20,5 +20,10 @@ public class PayItem { ...@@ -20,5 +20,10 @@ public class PayItem {
private String partnerId; private String partnerId;
private String fmTradeNo; private String fmTradeNo;
private Integer payChannelType; private Integer payChannelType;
private Integer payChannelName;
private String transId; private String transId;
private String orderPayItemCode;
private String outOrderNo;
private String platformTradeNo;
private String endTransTradeNo;
} }
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