Commit 8875579c by xiaoer.li@freemud.com

调整混合支付流程

parent 56bd8f8e
......@@ -262,7 +262,6 @@ public class OrderSdkAdapter {
//订单重量
Double orderWeight = sumOrderWeight(requestVO.getProducts());
request.setWeight(orderWeight);
request.setOrderPayItemCreateReqList(requestVO.getOrderPayItemCreateReqList());
return request;
}
......
......@@ -166,7 +166,6 @@ public class BaseCreateOrderRequest extends BaseConfig {
* 收货地址Id
*/
private String receiveId;
private List<OrderPayItemCreateReq> orderPayItemCreateReqList;
@Data
public static class DeliveryTypeInfo {
/**
......
......@@ -303,8 +303,6 @@ public class OrderAdapter {
createOrderDto.setActivityUpdateStockRequest(activityUpdateStockRequest);
}
createOrderDto.setPayChannelType(createOrderVo.getPayChannelType());
createOrderDto.setOrderPayItemCreateReqList(createOrderVo.getOrderPayItemCreateReqList());
// createOrderDto.setOtherInfo(getOrderOtherInfo(shoppingCartGoodsDto));
return createOrderDto;
}
......@@ -3361,9 +3359,8 @@ public class OrderAdapter {
, null
, createOrderVo.getUnionPayCard()
, createOrderVo.getShopId()
, createOrderVo.getOrderPayItemCreateReqList()
, createOrderVo.getCashAmount()
, createOrderVo.getSvcAmount());
, createOrderVo.getChannel()
);
}
public CreatePrepayRequestDto convertToCreatePrepayRequestDto(String partnerId
, String wxAppId, String openId
......@@ -3375,13 +3372,11 @@ public class OrderAdapter {
, long totalAmount
, int cardAmount
, OrderExtInfoDto orderExtInfoDTO
,String transId
, String transId
, OrderClientType orderClient
, CreateOrderVo.UnionPayCard unionPayCard
, String storeId
, List<OrderPayItemCreateReq> payItem
, BigDecimal cashAmount
, BigDecimal svcAmount){
, String channel){
CreatePrepayRequestDto requestDto = new CreatePrepayRequestDto();
requestDto.setPartnerId(partnerId);
requestDto.setWxAppId(wxAppId);
......@@ -3398,9 +3393,7 @@ public class OrderAdapter {
requestDto.setOrderClient(orderClient);
requestDto.setUnionPayCard(unionPayCard);
requestDto.setStoreId(storeId);
requestDto.setOrderPayItemCreateReqList(payItem);
requestDto.setCashAmount(cashAmount);
requestDto.setSvcAmount(svcAmount);
requestDto.setChannel(channel);
return requestDto;
}
......@@ -3505,62 +3498,33 @@ public class OrderAdapter {
return deleteOrderDto;
}
/**
* svc卡支付+现金支付
* @param cashAmount
* @param svcAmount
* @param payChannelType
* @return
*/
public List<OrderPayItemCreateReq> setOrderPayItem(BigDecimal cashAmount,BigDecimal svcAmount, Byte payChannelType){
List<OrderPayItemCreateReq> orderPayItemCreateReqs = new ArrayList<>(0);
OrderPayItemCreateReq orderPayItemCreateReqSvc = new OrderPayItemCreateReq();
//svc卡
orderPayItemCreateReqSvc.setPayAmount(svcAmount);
orderPayItemCreateReqSvc.setPayChannelType(PayChannelType.SVC.getIndex().intValue());
orderPayItemCreateReqSvc.setPayChannelName(PayChannelType.SVC.getName());
orderPayItemCreateReqSvc.setPayEbCode(PayChannelType.SVC.getEbcode());
orderPayItemCreateReqs.add(orderPayItemCreateReqSvc);
//现金支付
OrderPayItemCreateReq orderPayItemCreateReqOther = new OrderPayItemCreateReq();
orderPayItemCreateReqOther.setPayAmount(cashAmount);
orderPayItemCreateReqOther.setPayChannelType(PayChannelType.getByIndex(payChannelType).getIndex().intValue());
orderPayItemCreateReqOther.setPayChannelName(PayChannelType.getByIndex(payChannelType).getName());
orderPayItemCreateReqOther.setPayEbCode(PayChannelType.getByIndex(payChannelType).getEbcode());
orderPayItemCreateReqs.add(orderPayItemCreateReqOther);
return orderPayItemCreateReqs;
}
/**
* 混合支付预支付信息转换
* @param paymentRequest
* @param createPrepayRequestDto
* @param partnerPayOvertime
* @return
*/
public CombPayRequest convent2CombPayOrderRequest(PaymentRequest paymentRequest
, CreatePrepayRequestDto createPrepayRequestDto
, String partnerPayOvertime,String orderClient) {
public CombPayRequest convent2CombPayOrderRequest(String cardNo
, QueryOrdersResponse.DataBean.OrderBean orderBean
, PaymentRequest paymentRequest
, String partnerPayOvertime
, String orderClient
, String channel
, Integer totalAmount
, Integer svcAmount
, Integer svcVAmount) {
CombPayRequest orderPayDto = new CombPayRequest();
orderPayDto.setEbCode(paymentRequest.getPayCode());
orderPayDto.setPartner_id(createPrepayRequestDto.getPartnerId());
orderPayDto.setPartner_id(orderBean.getCompanyId());
orderPayDto.setBody(paymentRequest.getPrincipalName());
orderPayDto.setNotify_url(paymentRequest.getReverseNotifyiDcUrl());
orderPayDto.setStore_id(createPrepayRequestDto.getStoreId());
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(createPrepayRequestDto.getTotalAmount());
orderPayDto.setAmount(totalAmount.longValue());
orderPayDto.setVip_amount(0L);
orderPayDto.setAppId(paymentRequest.getWxAppId());
orderPayDto.setPayCode(paymentRequest.getPayCode());
orderPayDto.setVer("V1");
orderPayDto.setPayTimeOutTime(StringUtils.defaultIfBlank(partnerPayOvertime, "30"));
List<ProductVO> productVOS = new ArrayList<ProductVO>();
if (CollectionUtils.isNotEmpty(createPrepayRequestDto.getFatherOrderBean().getProductList())) {
for (QueryOrdersResponse.DataBean.OrderBean.ProductBean product : createPrepayRequestDto.getFatherOrderBean().getProductList()) {
if (CollectionUtils.isNotEmpty(orderBean.getProductList())) {
for (QueryOrdersResponse.DataBean.OrderBean.ProductBean product : orderBean.getProductList()) {
ProductVO productBean = new ProductVO();
productBean.setId(product.getProductId());
productBean.setQuantity(product.getNumber());
......@@ -3573,29 +3537,26 @@ public class OrderAdapter {
}
orderPayDto.setProducts(productVOS);
List<PayPlatformVO> platforms = new ArrayList<>();
if(null != createPrepayRequestDto.getOrderPayItemCreateReqList() && createPrepayRequestDto.getOrderPayItemCreateReqList().size()>0){
for (OrderPayItemCreateReq orderPayItemCreateReq : createPrepayRequestDto.getOrderPayItemCreateReqList()) {
PayPlatformVO payPlatformVO = new PayPlatformVO();
payPlatformVO.setAmount(orderPayItemCreateReq.getPayAmount().longValue());
payPlatformVO.setEbcode(orderPayItemCreateReq.getPayEbCode());
if (orderPayItemCreateReq.getPayEbCode().equals(PayChannelType.SVC.getEbcode())) {
payPlatformVO.setClientCode(orderPayItemCreateReq.getPayEbCode());
}
else if (orderPayItemCreateReq.getPayEbCode().equals(PayChannelType.WECHAT.getEbcode())) {
payPlatformVO.setClientCode(orderClient);
}
else if (orderPayItemCreateReq.getPayEbCode().equals(PayChannelType.ALIPAY.getEbcode())) {
payPlatformVO.setClientCode(orderClient);
}
platforms.add(payPlatformVO);
}
}
Long svc = svcAmount.longValue()+svcVAmount.longValue();
PayPlatformVO payPlatformVO = new PayPlatformVO();
payPlatformVO.setClientCode(PayChannelType.SVC.getEbcode());
payPlatformVO.setEbcode(PayChannelType.SVC.getEbcode());
payPlatformVO.setAmount(svc);
platforms.add(payPlatformVO);
String ebcode = PayChannelType.getByIndex(Byte.parseByte(channel)).getEbcode();
payPlatformVO = new PayPlatformVO();
payPlatformVO.setAmount(totalAmount.longValue() - svc);
payPlatformVO.setClientCode(orderClient);
payPlatformVO.setEbcode(ebcode);
platforms.add(payPlatformVO);
orderPayDto.setPlatforms(platforms);
orderPayDto.setOut_order_no(createPrepayRequestDto.getFatherOrderBean().getOid());
orderPayDto.setCardCode(createPrepayRequestDto.getCardCode());
orderPayDto.setOut_order_no(orderBean.getOid());
orderPayDto.setCardCode(cardNo);
return orderPayDto;
}
}
/**
* 混合支付返回的支付参数
* @param payPlatforms
......@@ -3630,6 +3591,7 @@ public class OrderAdapter {
PayItem payItem = new PayItem();
payItem.setFmTradeNo(pt.getFmTradeNo());
payItem.setPayChannelType(PayChannelType.getByEbcode(pt.getEbCode()).getIndex().intValue());
//payItem.setPayChannelName(PayChannelType.getByEbcode(pt.getEbCode()).getName());
payItem.setTransId(pt.getTransId());
payItem.setPartnerId(partnerId);
responseDto.getPayItem().add(payItem);
......
......@@ -71,15 +71,6 @@ public class CreatePrepayRequestDto {
* 使用电子风味卡
*/
private CreateOrderVo.UnionPayCard unionPayCard;
private List<OrderPayItemCreateReq> orderPayItemCreateReqList;
/**
* svc支付金额
*/
private BigDecimal svcAmount;
/**
* 现金支付金额
*/
private BigDecimal cashAmount;
private String storeId;
private String channel;
}
......@@ -249,19 +249,6 @@ public class CreateOrderVo {
@Valid
@ApiModelProperty(value = "电子风味卡")
private UnionPayCard unionPayCard;
/**
* 混合支付
*/
private List<OrderPayItemCreateReq> orderPayItemCreateReqList = new ArrayList<>();
/**
* svc支付金额
*/
private BigDecimal svcAmount;
/**
* 现金支付金额
*/
private BigDecimal cashAmount;
/**
* 电子风味卡
*/
......
......@@ -750,47 +750,4 @@ public class CheckOrder {
// 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;
}
}
......@@ -323,7 +323,6 @@ public class OrderServiceImpl implements Orderservice {
Integer pushOrderTime = checkOrder.checkOrderByOrderType(createOrderVo, userLoginInfoDto, storeResponseDto, shoppingCartGoodsDto, trackingNo);
OrderExtInfoDto extInfo = getExtInfo(userLoginInfoDto, storeResponseDto, pushOrderTime, createOrderVo, shoppingCartGoodsDto);
boolean svcPay = checkOrder.checkSvcPay(createOrderVo, shoppingCartGoodsDto, trackingNo);
//1.9.2套餐需求同步优化创建订单代码
BaseResponse createOrderOperateDtoResponse = this.sdkCreateOrder(createOrderVo, storeResponseDto, shoppingCartGoodsDto, userLoginInfoDto);
if(createOrderOperateDtoResponse == null || !ResponseResult.SUCCESS.getCode().equals(createOrderOperateDtoResponse.getCode()) || createOrderOperateDtoResponse.getResult() == null ) {
......@@ -332,13 +331,7 @@ public class OrderServiceImpl implements Orderservice {
CreateOrderOperateDto createOrderOperateDto = (CreateOrderOperateDto)createOrderOperateDtoResponse.getResult();
//创建支付
CreatePrepayRequestDto createPrepayRequestDto = orderAdapter.convertToCreatePrepayRequestDto(userLoginInfoDto, createOrderVo, createOrderOperateDto, extInfo);
if (svcPay) {
return this.createCombpayOrder(createPrepayRequestDto);
}
else {
return this.createPrepayOrder(createPrepayRequestDto);
}
return this.createPrepayOrder(createPrepayRequestDto);
}
/**
......@@ -2253,9 +2246,10 @@ public class OrderServiceImpl implements Orderservice {
} else if (totalAmount > 0 && StringUtils.isBlank(cardCode)) {
String partnerPayOvertime = this.getPartnerPayOvertime(createPrepayRequestDto.getPartnerId());
orderPayResponse = getPreOrderPay(createPrepayRequestDto.getFatherOrderBean(), paymentRequest, LogThreadLocal.getTrackingNo(), createPrepayRequestDto.getCardAmount(), transId, partnerPayOvertime);
} else if (totalAmount > 0 && StringUtils.isNotBlank(cardCode)) {
//svc卡支付
orderPayResponse = svcPay(cardCode, createPrepayRequestDto.getFatherOrderBean(), paymentRequest, transId, LogThreadLocal.getTrackingNo());
}
//混合支付+svc卡
else if (totalAmount > 0 && StringUtils.isNotBlank(cardCode)) {
orderPayResponse = switchSvcOrComb(totalAmount,cardCode, createPrepayRequestDto.getFatherOrderBean(), paymentRequest, transId, createPrepayRequestDto.getChannel(),createPrepayRequestDto.getStoreId(),LogThreadLocal.getTrackingNo());
} else {
// 0元订单如果不需要支付,自定义支付单号
orderPayResponse = getOrderPayResponse(paymentRequest, createPrepayRequestDto.getFatherOrderBean());
......@@ -2301,6 +2295,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
* @param orderBean
......@@ -2414,31 +2453,6 @@ public class OrderServiceImpl implements Orderservice {
return ResponseUtil.error(ResponseResultEnum.PAY_UNIFIED_ORDER_ERROR.getCode(), ResponseResultEnum.PAY_UNIFIED_ORDER_ERROR.getMessage(), null);
}
/**
* 混合预支付
* @param trackingNo
* @param orderBean
* @param cardCode
* @param orderClient
* @param msg
* @return
*/
private BaseResponse failCombPreOrderPay(String trackingNo, QueryOrdersResponse.DataBean.OrderBean orderBean, String cardCode, OrderClientType orderClient, String msg) {
List<OrderClientType> notCancelOrderClientList = Lists.newArrayList(OrderClientType.APP);
if(!notCancelOrderClientList.contains(orderClient)) {
//失败冲正库存,冲正活动库存,取消订单
CancelOrderRequest cancelOrderRequest = orderAdapter.convent2CancelOrderRequest(orderBean.getOid(), orderBean.getCompanyId(),
AfterSalesType.SYSTEM_CANCEL, StringUtils.join(new String[]{"获取预支付失败", msg}, '-'), trackingNo, null);
orderCenterSdkService.orderCancel(cancelOrderRequest);
// TODO: 2019/9/10 hubowen mq推送变更
backOrdersStatusChange(orderBean.getOid(), orderBean.getStatus());
}
//svc 卡支付失败
//if (StringUtils.isNotBlank(cardCode)) {
// return ResponseUtil.error(ResponseResultEnum.PAY_BACKEND_CONFIG_ERROR.getCode(), ResponseResultEnum.PAY_BACKEND_CONFIG_ERROR.getMessage(), null);
//}
return ResponseUtil.error(ResponseResultEnum.PAY_UNIFIED_ORDER_ERROR.getCode(),"获取混合预支付信息失败", null);
}
public OrderPayResponse getPreOrderPay(QueryOrdersResponse.DataBean.OrderBean orderBean, PaymentRequest paymentRequest, String trackingNo, Integer cardAmount, String transId, String partnerPayOvertime) {
OrderPayResponse orderPayResponse;
try {
......@@ -2484,7 +2498,6 @@ public class OrderServiceImpl implements Orderservice {
svcRequest.setPartnerId(partnerId);
svcRequest.setCardCodes(Arrays.asList(cardCode));
//查询svc卡余额
log.info("svc支付:{}",transId);
com.freemud.application.sdk.api.base.BaseResponse<SVCCardAmountResponse> svcCardAmountResponseBaseResponse = paymentNewService.querySVCCardAmount(svcRequest, trackingNo);
if (svcCardAmountResponseBaseResponse == null || !ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(svcCardAmountResponseBaseResponse.getCode())
|| svcCardAmountResponseBaseResponse.getData().getData() == null || CollectionUtils.isEmpty(svcCardAmountResponseBaseResponse.getData().getData().getCardSimpleInfos())) {
......@@ -2647,9 +2660,7 @@ public class OrderServiceImpl implements Orderservice {
JSONObject.toJSONString(orderExtInfo));
orderEditRequest.setOrderId(orderBean.getOid());
orderEditRequest.setTrackingNo(trackingNo);
/**
* 混合支付项
*/
//混合支付项
if (CollectionUtils.isNotEmpty(orderPayResponse.getPayItem())) {
orderEditRequest.setOrderPayItem(orderPayResponse.getPayItem());
}
......@@ -3154,157 +3165,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 createPrepayRequestDto
* @param partnerPayOvertime
* @param totalAmount
* @param svcAmount
* @param svcVAmount
* @param channel
* @param storeId
* @param trackingNo
* @return
*/
private OrderPayResponse comPayOrder(PaymentRequest paymentRequest
, CreatePrepayRequestDto createPrepayRequestDto
public OrderPayResponse comPayOrder(String cardNo
, QueryOrdersResponse.DataBean.OrderBean orderBean
, PaymentRequest paymentRequest
, String partnerPayOvertime
, Integer totalAmount
, Integer svcAmount
, Integer svcVAmount
, String channel
, String storeId
, String trackingNo) {
OrderPayResponse orderPayResponse = null;
CombPayResponse responseBase = null;
CombPayRequest combPayRequest = null;
CombPayResponse.PayPlatform payPlatform = null;
log.info("混合支付...");
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());
String ebCode = this.getPayCodeByChanel(paymentRequest.getWxAppId(), channel, storeId);
OrderPayResponse orderPayResponse = new OrderPayResponse();;
if (StringUtils.isBlank(ebCode)) {
orderPayResponse.setMsg("渠道码没有配置");
return orderPayResponse;
}
}
}
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("混合支付异常...");
//TODO 邮件告警
LogUtil.error("comPay_error", JSONObject.toJSONString(responseBase), JSONObject.toJSONString(paymentRequest), e);
orderPayResponse = new OrderPayResponse();
orderPayResponse.setMsg("comPay_error");
//生成预支付参数
CombPayResponse.PayPlatform payPlatform = combPayResponse.getData().getPayPlatformResponseList()
.stream()
.filter(f -> !PayChannelType.SVC.getEbcode().equals(f.getEbCode())).findFirst()
.orElse(null);
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;
}
/**
* 通过payCode ->clientCode
* @param createPrepayRequestDto
* @param wxAppid
* @param channel
* @param storeId
* @return
*/
private String getPayCodeByChanel(CreatePrepayRequestDto createPrepayRequestDto) {
if (CollectionUtils.isEmpty(createPrepayRequestDto.getOrderPayItemCreateReqList())) return "";
OrderPayItemCreateReq payItem = createPrepayRequestDto.getOrderPayItemCreateReqList()
.stream()
.filter(d -> !d.getPayEbCode().equals(PayChannelType.SVC.getEbcode()))
.findFirst()
.orElse(null);
if (payItem == null) return "";
AssortmentOpenPlatformIappWxappStore wxAppStore = assortmentOpenPlatformIappWxappStoreManager.selectWxappStoreByWxAppIdAndStoreId(createPrepayRequestDto.getWxAppId()
, createPrepayRequestDto.getStoreId()
, payItem.getPayEbCode());
private String getPayCodeByChanel(String wxAppid,String channel,String storeId) {
if (StringUtils.isBlank(channel)) return "";
PayChannelType byIndex = PayChannelType.getByIndex(Byte.parseByte(channel));
if (byIndex.getEbcode() == null) return "";
AssortmentOpenPlatformIappWxappStore wxAppStore = assortmentOpenPlatformIappWxappStoreManager.selectWxappStoreByWxAppIdAndStoreId(wxAppid
, storeId
, byIndex.getEbcode());
if (StringUtils.isNotBlank(wxAppStore.getClientCode())) {
return wxAppStore.getClientCode();
}
......
......@@ -20,5 +20,10 @@ public class PayItem {
private String partnerId;
private String fmTradeNo;
private Integer payChannelType;
private Integer payChannelName;
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