Commit 49f780ca by rui.zhu

Merge branch 'master' into qa

parents 522c7256 05359cb9
...@@ -92,7 +92,11 @@ public class PaymentHandle { ...@@ -92,7 +92,11 @@ public class PaymentHandle {
} }
// 最大可退金额 = 订单实付总额 - 开通会员卡金额 退款的时候会员卡已经开通了,所以开卡费不可退 // 最大可退金额 = 订单实付总额 - 开通会员卡金额 退款的时候会员卡已经开通了,所以开卡费不可退
BigDecimal maxRefundAmount = openMemberCardCost != null ? new BigDecimal(orderBean.getAmount()).subtract(openMemberCardCost.getCostAmount()) : new BigDecimal(orderBean.getAmount()); BigDecimal maxRefundAmount = openMemberCardCost != null ? new BigDecimal(orderBean.getAmount()).subtract(openMemberCardCost.getCostAmount()) : new BigDecimal(orderBean.getAmount());
BigDecimal refundAmount = getRefundAmount(orderBean.getCompanyId(), maxRefundAmount, orderBean.getOid()); BigDecimal refundAmount = maxRefundAmount;
AfterSalesOrderResp afterSalesOrder = getAfterSalesOrder(orderBean.getCompanyId(), orderBean.getOid());
if (afterSalesOrder != null) {
refundAmount = new BigDecimal(afterSalesOrder.getActualAmount());
}
//订单支付明细表新saas都会存数据,ka,pass商户需要兼容 //订单支付明细表新saas都会存数据,ka,pass商户需要兼容
PayRefundResponse multiRefundResponse = multiRefundService.multiRefund(orderBean.getCompanyId(), orderBean.getShopId(), PayRefundResponse multiRefundResponse = multiRefundService.multiRefund(orderBean.getCompanyId(), orderBean.getShopId(),
orderBean.getOid(), refundAmount, orderBean.getOrderPayItem(),Integer.parseInt(orderBean.getOrderClient())); orderBean.getOid(), refundAmount, orderBean.getOrderPayItem(),Integer.parseInt(orderBean.getOrderClient()));
...@@ -119,7 +123,12 @@ public class PaymentHandle { ...@@ -119,7 +123,12 @@ public class PaymentHandle {
refundResponse = this.payRefund(req); refundResponse = this.payRefund(req);
} }
} }
refundResponse.setPartRefund(!Objects.equals(maxRefundAmount.compareTo(refundAmount), 0)); boolean partRefund = !Objects.equals(maxRefundAmount.compareTo(refundAmount), 0);
if (afterSalesOrder != null) {
refundResponse.setPartRefund(partRefund && afterSalesOrder.getIsPartRefund());
} else {
refundResponse.setPartRefund(partRefund);
}
} catch (OrderServiceException orderEx) { } catch (OrderServiceException orderEx) {
ResponseResult result = orderEx.getResult(); ResponseResult result = orderEx.getResult();
refundResponse = new PayRefundResponse(); refundResponse = new PayRefundResponse();
...@@ -155,7 +164,11 @@ public class PaymentHandle { ...@@ -155,7 +164,11 @@ public class PaymentHandle {
openMemberCardCost = order.getOrderCostDetailList().stream().filter(c -> Objects.equals(c.getCostType(), OrderCostType.OPEN_MEMBER_CARD_FEE.getType())).findFirst().orElse(null); openMemberCardCost = order.getOrderCostDetailList().stream().filter(c -> Objects.equals(c.getCostType(), OrderCostType.OPEN_MEMBER_CARD_FEE.getType())).findFirst().orElse(null);
} }
BigDecimal maxRefundAmount = openMemberCardCost != null ? order.getSettlementAmount().subtract(openMemberCardCost.getCostAmount()) : order.getSettlementAmount(); BigDecimal maxRefundAmount = openMemberCardCost != null ? order.getSettlementAmount().subtract(openMemberCardCost.getCostAmount()) : order.getSettlementAmount();
BigDecimal refundAmount = getRefundAmount(order.getPartnerId(), maxRefundAmount, order.getOrderCode()); BigDecimal refundAmount = maxRefundAmount;
AfterSalesOrderResp afterSalesOrder = getAfterSalesOrder(order.getPartnerId(), order.getOrderCode());
if (afterSalesOrder != null) {
refundAmount = new BigDecimal(afterSalesOrder.getActualAmount());
}
PayRefundResponse multiRefundResponse = multiRefundService.multiRefund(order.getPartnerId(), order.getStoreId(), PayRefundResponse multiRefundResponse = multiRefundService.multiRefund(order.getPartnerId(), order.getStoreId(),
order.getOrderCode(), refundAmount, order.getOrderPayItemCreateReqList(),order.getOrderClient()); order.getOrderCode(), refundAmount, order.getOrderPayItemCreateReqList(),order.getOrderClient());
...@@ -184,7 +197,12 @@ public class PaymentHandle { ...@@ -184,7 +197,12 @@ public class PaymentHandle {
refundResponse = this.payRefund(req); refundResponse = this.payRefund(req);
} }
} }
refundResponse.setPartRefund(!Objects.equals(maxRefundAmount.compareTo(refundAmount), 0)); boolean partRefund = !Objects.equals(maxRefundAmount.compareTo(refundAmount), 0);
if (afterSalesOrder != null) {
refundResponse.setPartRefund(partRefund && afterSalesOrder.getIsPartRefund());
} else {
refundResponse.setPartRefund(partRefund);
}
refundResponse.setRefundAmount(refundAmount); refundResponse.setRefundAmount(refundAmount);
} catch (OrderServiceException orderEx) { } catch (OrderServiceException orderEx) {
ResponseResult result = orderEx.getResult(); ResponseResult result = orderEx.getResult();
...@@ -309,7 +327,11 @@ public class PaymentHandle { ...@@ -309,7 +327,11 @@ public class PaymentHandle {
public PayRefundResponse refund(String reason, OrderBeanV1 orderBean) { public PayRefundResponse refund(String reason, OrderBeanV1 orderBean) {
PayRefundStatus refundStatus = PayRefundStatus.SUCCESS; PayRefundStatus refundStatus = PayRefundStatus.SUCCESS;
BigDecimal refundAmount = getRefundAmount(orderBean.getCompanyId(), new BigDecimal(orderBean.getAmount()), orderBean.getOid()); BigDecimal refundAmount = new BigDecimal(orderBean.getAmount());
AfterSalesOrderResp afterSalesOrder = getAfterSalesOrder(orderBean.getCompanyId(), orderBean.getOid());
if (afterSalesOrder != null) {
refundAmount = new BigDecimal(afterSalesOrder.getActualAmount());
}
PayRefundRequestDto orderRefundRequest = paymentSdkAdapter PayRefundRequestDto orderRefundRequest = paymentSdkAdapter
.getOrderRefundRequest(orderBean.getCompanyId(), orderBean.getShopId(), orderBean.getOid(), refundAmount, orderBean.getPayVoucher(), orderBean.getExtInfo(), reason); .getOrderRefundRequest(orderBean.getCompanyId(), orderBean.getShopId(), orderBean.getOid(), refundAmount, orderBean.getPayVoucher(), orderBean.getExtInfo(), reason);
if (ObjectUtils.equals(orderBean.getAmount(), 0L)) { if (ObjectUtils.equals(orderBean.getAmount(), 0L)) {
...@@ -366,19 +388,17 @@ public class PaymentHandle { ...@@ -366,19 +388,17 @@ public class PaymentHandle {
} }
/** /**
* 获取退款金额 * 获取退款售后单
* * @param partnerId 商户号
* @param partnerId 商户号 * @param orderId 订单号
* @param refundAmount 总金额 * @return {@link AfterSalesOrderResp}
* @param orderId 订单号
* @return 退款金额
*/ */
private BigDecimal getRefundAmount(String partnerId, BigDecimal refundAmount, String orderId) { private AfterSalesOrderResp getAfterSalesOrder(String partnerId, String orderId) {
OrderBaseResp<List<AfterSalesOrderResp>> listBaseResponse = orderSdkService.queryAfterSaleByOrderCode(partnerId, orderId); OrderBaseResp<List<AfterSalesOrderResp>> listBaseResponse = orderSdkService.queryAfterSaleByOrderCode(partnerId, orderId);
if (CollectionUtils.isNotEmpty(listBaseResponse.getResult())) { if (CollectionUtils.isNotEmpty(listBaseResponse.getResult())) {
refundAmount = new BigDecimal(listBaseResponse.getResult().get(0).getActualAmount()); return listBaseResponse.getResult().get(0);
} }
return refundAmount; return null;
} }
private PayRefundResponse handlePayRefundResponse(PayRefundStatus refundStatus, String refundId) { private PayRefundResponse handlePayRefundResponse(PayRefundStatus refundStatus, String refundId) {
......
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