|
@@ -378,6 +378,24 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|
|
}
|
|
|
OmsOrder cancelOrder = cancelOrderList.get(0);
|
|
|
if (cancelOrder != null && (cancelOrder.getStatus() == 0 || cancelOrder.getStatus() == 6)) {
|
|
|
+
|
|
|
+ // 查询订单是否为支付
|
|
|
+ UserOrderPayment orderPayment = userOrderPaymentService.getByOrderNoAndStatusPaying(cancelOrder.getOrderSn());
|
|
|
+
|
|
|
+ if (orderPayment != null) {
|
|
|
+ // 查询订单信息
|
|
|
+ BaseResult<Payment> res = getPaymentBaseResult(orderPayment);
|
|
|
+ //支付成功
|
|
|
+ if (res.getStatus() && TradeStatusEnum.succeeded.getCode().equals(res.getData().getStatus().getCode())
|
|
|
+ && cancelOrder.getStatus() == 0) {
|
|
|
+ orderSuccess(cancelOrder,null, res.getData());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询订单下支付中的付款单,取消支付
|
|
|
+ userOrderPaymentService.closePayment(orderPayment.getOrderNo(), "用户发起了新的付款请求", null);
|
|
|
+ }
|
|
|
+
|
|
|
//修改订单状态为取消
|
|
|
cancelOrder.setStatus(4);
|
|
|
orderMapper.updateByPrimaryKeySelective(cancelOrder);
|
|
@@ -539,17 +557,23 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|
|
orderPayRes.setMessage("订单已付款或已关闭");
|
|
|
return orderPayRes;
|
|
|
}
|
|
|
- // UserOrderPayment userOrderPayment = userOrderPaymentService.getByOrderNo(detail.getOrderSn(),
|
|
|
- // payReq.getPayChannel(),TradeStatusEnum.pending);
|
|
|
- //
|
|
|
- // if (userOrderPayment != null) {
|
|
|
- // // 拉起原有的支付
|
|
|
- // orderPayRes = new OrderPayRes();
|
|
|
- // orderPayRes.setPay_info(userOrderPayment.getPayInfo());
|
|
|
- // orderPayRes.setPayChannel(userOrderPayment.getPayChannel());
|
|
|
- // orderPayRes.setPay_amt(userOrderPayment.getPayAmt().setScale(2, RoundingMode.HALF_UP).toString());
|
|
|
- // return orderPayRes;
|
|
|
- // }
|
|
|
+ UserOrderPayment orderPayment = userOrderPaymentService.getByOrderNoAndStatusPaying(detail.getOrderSn());
|
|
|
+
|
|
|
+ if (orderPayment != null) {
|
|
|
+ // 查询订单信息
|
|
|
+ BaseResult<Payment> res = getPaymentBaseResult(orderPayment);
|
|
|
+ //支付成功
|
|
|
+ if (res.getStatus() && TradeStatusEnum.succeeded.getCode().equals(res.getData().getStatus().getCode())
|
|
|
+ && detail.getStatus() == 0) {
|
|
|
+ orderSuccess(detail,null, res.getData());
|
|
|
+ orderPayRes.setStatus(false);
|
|
|
+ orderPayRes.setMessage("订单已付款或已关闭");
|
|
|
+ return orderPayRes;
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询订单下支付中的付款单,取消支付
|
|
|
+ userOrderPaymentService.closePayment(orderPayment.getOrderNo(), "用户发起了新的付款请求", null);
|
|
|
+ }
|
|
|
|
|
|
//构建汇付统一下单请求
|
|
|
OpenEnum openType = OpenEnum.valueOf(paymentProperties.getOpenType());
|
|
@@ -623,6 +647,15 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|
|
return orderPayRes;
|
|
|
}
|
|
|
|
|
|
+ private BaseResult<Payment> getPaymentBaseResult(UserOrderPayment orderPayment) {
|
|
|
+ Payment param = new Payment(OpenEnum.valueOf(orderPayment.getOpenType()),
|
|
|
+ PaymentClientEnum.valueOf(orderPayment.getPaymentClient()),
|
|
|
+ PayChannelEnum.valueOf(orderPayment.getPayChannel()));
|
|
|
+ param.setId(orderPayment.getTransNo());
|
|
|
+ param.setPaymentNo(orderPayment.getAdapayNo());
|
|
|
+ return paymentClient.queryPayment(param);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
private void saveOrderPayment(Payment payment, OmsOrderDetail detail, String paymentClient) {
|
|
|
UserOrderPayment userOrderPayment;
|
|
@@ -646,9 +679,6 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|
|
userOrderPayment.setCreateTime(new Date());
|
|
|
userOrderPayment.setUpdateTime(new Date());
|
|
|
|
|
|
- //查询订单下支付中的付款单,取消支付
|
|
|
- userOrderPaymentService.closePayment(payment.getOrderNo(), "用户发起了新的付款请求", null);
|
|
|
-
|
|
|
userOrderPaymentService.save(userOrderPayment);
|
|
|
}
|
|
|
|
|
@@ -695,19 +725,19 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|
|
}
|
|
|
OmsOrderDetail detail = detail(userOrderPayment.getOrderNo());
|
|
|
if (detail.getStatus() == 0) {
|
|
|
- orderSuccess(detail, data, data.getId());
|
|
|
+ orderSuccess(detail, data, null);
|
|
|
} else {
|
|
|
LOG.error("汇付支付回调,订单状态异常。 req is {}", detail.getOrderSn());
|
|
|
LOG.warn("支付金额原路退回 {}", detail.getOrderSn());
|
|
|
- orderRefund(userOrderPayment,data,detail);
|
|
|
+ orderRefund(userOrderPayment,data.getExecutePaymentCallBack().getPayAmt(),data.getId(),detail);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 支付成功,业务退款
|
|
|
*/
|
|
|
- private void orderRefund(UserOrderPayment userOrderPayment,PaymentCallBack data,OmsOrder order) {
|
|
|
- UserOrderRefund userOrderRefund = userOrderRefundMapper.selectByPayOrderNo(userOrderPayment.getOrderNo());
|
|
|
+ private void orderRefund(UserOrderPayment userOrderPayment,String refundAmount,String payTransNo,OmsOrder order) {
|
|
|
+ UserOrderRefund userOrderRefund = userOrderRefundMapper.selectByPayOrderNo(userOrderPayment.getAdapayNo());
|
|
|
if (userOrderRefund != null && userOrderRefund.getStatus().equals("succeeded")) {
|
|
|
LOG.warn("支付金额已退回");
|
|
|
return;
|
|
@@ -717,17 +747,17 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|
|
|
|
|
RefundBill refundReq = new RefundBill(OpenEnum.valueOf(userOrderPayment.getOpenType()), PaymentClientEnum.valueOf(userOrderPayment.getPaymentClient()), PayChannelEnum.valueOf(userOrderPayment.getPayChannel()));
|
|
|
refundReq.setRefundNo(orderSn);
|
|
|
- refundReq.setRefundAmt(new BigDecimal(data.getExecutePaymentCallBack().getPayAmt()));
|
|
|
+ refundReq.setRefundAmt(new BigDecimal(refundAmount));
|
|
|
|
|
|
refundReq.setReason("支付超时,全额退回");
|
|
|
refundReq.setPaymentNo(userOrderPayment.getAdapayNo());
|
|
|
- refundReq.setTradeNo(data.getId());
|
|
|
+ refundReq.setTradeNo(payTransNo);
|
|
|
refundReq.setOrderAmt(userOrderPayment.getPayAmt());
|
|
|
BaseResult<RefundBill> refundBillBaseResult = paymentClient.refundPayment(refundReq);
|
|
|
userOrderRefund = new UserOrderRefund();
|
|
|
userOrderRefund.setOrderNo(orderSn);
|
|
|
- userOrderRefund.setPayTransNo(data.getId());
|
|
|
- userOrderRefund.setRefundAmt(userOrderPayment.getPayAmt());
|
|
|
+ userOrderRefund.setPayTransNo(payTransNo);
|
|
|
+ userOrderRefund.setRefundAmt(new BigDecimal(refundAmount));
|
|
|
userOrderRefund.setPayOrderNo(userOrderPayment.getOrderNo());
|
|
|
if (refundBillBaseResult.getStatus()) {
|
|
|
RefundBill refundBill = refundBillBaseResult.getData();
|
|
@@ -816,18 +846,13 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|
|
}
|
|
|
OmsOrderDetail detail = detail(orderPayment.getOrderNo());
|
|
|
try {
|
|
|
- Payment param = new Payment(OpenEnum.valueOf(orderPayment.getOpenType()),
|
|
|
- PaymentClientEnum.valueOf(orderPayment.getPaymentClient()),
|
|
|
- PayChannelEnum.valueOf(orderPayment.getPayChannel()));
|
|
|
- param.setId(orderPayment.getTransNo());
|
|
|
- param.setPaymentNo(orderPayment.getAdapayNo());
|
|
|
- BaseResult<Payment> res = paymentClient.queryPayment(param);
|
|
|
+ BaseResult<Payment> res = getPaymentBaseResult(orderPayment);
|
|
|
//支付成功
|
|
|
if (res.getStatus() && TradeStatusEnum.succeeded.getCode()
|
|
|
.equals(res.getData()
|
|
|
.getStatus()
|
|
|
- .getCode()) && (detail.getStatus() == 0 || detail.getStatus() == 1)) {
|
|
|
- orderSuccess(detail, res.getData().getId());
|
|
|
+ .getCode()) && detail.getStatus() == 0) {
|
|
|
+ orderSuccess(detail,null, res.getData());
|
|
|
return;
|
|
|
}
|
|
|
//支付失败
|
|
@@ -843,10 +868,6 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|
|
}
|
|
|
|
|
|
|
|
|
- void orderSuccess(OmsOrder detail, String tranId) {
|
|
|
- orderSuccess(detail, null, tranId);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 订单完成
|
|
|
*
|
|
@@ -854,7 +875,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|
|
* @updateTime 2022/4/13 17:17
|
|
|
*/
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void orderSuccess(OmsOrder detail, PaymentCallBack data, String tranId) {
|
|
|
+ public void orderSuccess(OmsOrder detail, PaymentCallBack data,Payment payment) {
|
|
|
//更新订单
|
|
|
UserOrderPayment orderPayment = userOrderPaymentService.getByOrderNoAndStatusPaying(detail.getOrderSn());
|
|
|
|
|
@@ -862,26 +883,36 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|
|
LOG.error("支付回调,支付中订单未找到。 orderNo is {}", detail.getOrderSn());
|
|
|
return;
|
|
|
}
|
|
|
+
|
|
|
+ // 判断支付金额 是否正确
|
|
|
+ BigDecimal pay_amt;
|
|
|
if (data != null) {
|
|
|
- String pay_amt = data.getExecutePaymentCallBack().getPayAmt();
|
|
|
- if (!pay_amt.equals(detail.getPayAmount().setScale(2, RoundingMode.HALF_UP).toString())) {
|
|
|
- orderPayment.setPayFailMsg("订单金额和实际支付金额不符");
|
|
|
- }
|
|
|
+ pay_amt = new BigDecimal(data.getExecutePaymentCallBack().getPayAmt());
|
|
|
+
|
|
|
+ orderPayment.setTransNo(data.getId());
|
|
|
+ } else {
|
|
|
+ pay_amt = new BigDecimal(payment.getPayAmt());
|
|
|
+ orderPayment.setTransNo(payment.getId());
|
|
|
}
|
|
|
- if (orderPayment.getPayChannel().equals("alipay") || orderPayment.getPayChannel().equals("ali_app")) {
|
|
|
- paySuccess(detail.getId(), 1);
|
|
|
- } else if (orderPayment.getPayChannel().equals("wx_lite") || orderPayment.getPayChannel().equals("wx_app")) {
|
|
|
- paySuccess(detail.getId(), 2);
|
|
|
+ if (pay_amt.compareTo(detail.getPayAmount()) != 0) {
|
|
|
+ orderPayment.setPayFailMsg("订单金额和实际支付金额不符");
|
|
|
+ orderRefund(orderPayment,pay_amt.setScale(2, RoundingMode.HALF_UP).toString(),orderPayment.getTransNo(),detail);
|
|
|
+ } else {
|
|
|
+
|
|
|
+ if (orderPayment.getPayChannel().equals("alipay") || orderPayment.getPayChannel().equals("ali_app")) {
|
|
|
+ paySuccess(detail.getId(), 1);
|
|
|
+ } else if (orderPayment.getPayChannel().equals("wx_lite") || orderPayment.getPayChannel().equals("wx_app")) {
|
|
|
+ paySuccess(detail.getId(), 2);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
orderPayment.setStatus(TradeStatusEnum.succeeded.getCode());
|
|
|
orderPayment.setArrivalTime(new Date());
|
|
|
- orderPayment.setTransNo(tranId);
|
|
|
+ orderPayment.setPayAmt(pay_amt);
|
|
|
if (null != data) {
|
|
|
try {
|
|
|
orderPayment.setArrivalTime(data.getExecutePaymentCallBack().getTradeTime());
|
|
|
orderPayment.setTransNo(data.getId());
|
|
|
- orderPayment.setPayAmt(new BigDecimal(data.getExecutePaymentCallBack().getPayAmt()));
|
|
|
orderPayment.setFeeAmt(new BigDecimal(data.getExecutePaymentCallBack().getFeeAmt()));
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|