|
@@ -2,7 +2,6 @@ package com.yiqi.order.service.impl;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
-import cn.hutool.json.JSONUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
import com.yiqi.activity.domain.ActivityRechargeItem;
|
|
@@ -17,11 +16,10 @@ import com.yiqi.app.domain.AppCouponItem;
|
|
|
import com.yiqi.app.service.IAppCouponItemService;
|
|
|
import com.yiqi.common.core.domain.R;
|
|
|
import com.yiqi.common.utils.CurrencyUtil;
|
|
|
-import com.yiqi.common.utils.pay.PayCodeUtils;
|
|
|
-import com.yiqi.delay.DelayMessage;
|
|
|
import com.yiqi.delay.DelayQueueCache;
|
|
|
import com.yiqi.lock.RedisLockUtil;
|
|
|
import com.yiqi.order.domain.vo.*;
|
|
|
+import com.yiqi.order.domain.vo.weapp.AppPayRespVO;
|
|
|
import com.yiqi.order.dto.RechargePackageInfo;
|
|
|
import com.yiqi.order.service.IOrderRechargeCouponRelationService;
|
|
|
import com.yiqi.app.service.IAppUserBillMstrService;
|
|
@@ -53,7 +51,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -216,7 +213,7 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
|
|
|
|
|
|
orderRecharge.setUpdateTime(DateUtils.getNowDate());
|
|
|
|
|
|
- orderRecharge.setRefundStatus(OrderRefundStatus.REFUND_REFUSE.getCode());
|
|
|
+ orderRecharge.setRefundStatus(RechargeRefundStatusType.REFUND_REFUSE.getCode());
|
|
|
orderRecharge.buildUpdateData();
|
|
|
baseMapper.updateById(orderRecharge);
|
|
|
|
|
@@ -245,17 +242,25 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
|
|
|
OrderRecharge orderRecharge = validateRefundOrder(orderRechargeRefund.getOrderNo());
|
|
|
RechargePasswordCard rechargeCard = validateRechargeCard(orderRecharge.getOrderNo());
|
|
|
|
|
|
- // 3. 更新退款申请状态
|
|
|
- updateRefundStatus(orderRechargeRefund, orderRecharge, rechargeCard);
|
|
|
-
|
|
|
- // 4. 处理现金退款
|
|
|
+ // 3. 处理现金退款
|
|
|
if (PayType.CASH.getCode().equals(orderRechargeRefund.getRefundType()) || PayType.RECHARGE_CARD.getCode().equals(orderRechargeRefund.getRefundType())) {
|
|
|
- return handleCashRefund(orderRechargeRefund, orderRecharge, rechargeCard);
|
|
|
+ refundSuccess(orderRechargeRefund.getOrderNo());
|
|
|
+ return 1;
|
|
|
+ } else {
|
|
|
+ // 4. 更新退款申请状态
|
|
|
+ updateRefundStatus(orderRechargeRefund, orderRecharge, rechargeCard);
|
|
|
+
|
|
|
+ // 5. 发起第三方退款
|
|
|
+ // 1. 构建退款请求
|
|
|
+ PayRefundDTO refundDTO = buildRefundRequest(orderRechargeRefund, orderRecharge);
|
|
|
+
|
|
|
+ // 2. 发起退款
|
|
|
+ RefundResponseDTO response = payService.refundApply(refundDTO);
|
|
|
+ if (PayResult.fail.getCode() == (response.getRefundResult())) {
|
|
|
+ // 退款失败
|
|
|
+ refundError(refundDTO.getOrderNo());
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
- // 5. 发起第三方退款
|
|
|
- processThirdPartyRefund(orderRechargeRefund, orderRecharge);
|
|
|
-
|
|
|
return 1;
|
|
|
} catch (Exception e) {
|
|
|
log.error("退款审核处理失败, orderNo={}, error={}",
|
|
@@ -311,11 +316,6 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
|
|
|
RechargePasswordCard card) {
|
|
|
Date now = DateUtils.getNowDate();
|
|
|
|
|
|
- // 1. 更新充值卡状态
|
|
|
- card.setRechargeStatus(RechargeStatusType.FROZEN.getCode());
|
|
|
- card.buildUpdateData();
|
|
|
- rechargePasswordCardService.updateById(card);
|
|
|
-
|
|
|
// 2. 更新订单状态
|
|
|
orderRecharge.setUpdateTime(now);
|
|
|
orderRecharge.setRefundStatus(OrderRefundStatus.REFUNDING.getCode());
|
|
@@ -351,21 +351,6 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 处理第三方退款
|
|
|
- */
|
|
|
- private void processThirdPartyRefund(OrderRechargeRefund refundOrder,
|
|
|
- OrderRecharge orderRecharge) {
|
|
|
- // 1. 构建退款请求
|
|
|
- PayRefundDTO refundDTO = buildRefundRequest(refundOrder, orderRecharge);
|
|
|
-
|
|
|
- // 2. 发起退款
|
|
|
- RefundResponseDTO response = payService.refundApply(refundDTO);
|
|
|
-
|
|
|
- // 3. 处理退款结果
|
|
|
- handleRefundResponse(response, refundOrder, orderRecharge);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 构建退款请求
|
|
|
*/
|
|
@@ -393,46 +378,6 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
|
|
|
return refundDTO;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 处理退款响应
|
|
|
- */
|
|
|
- private void handleRefundResponse(RefundResponseDTO response,
|
|
|
- OrderRechargeRefund refundOrder,
|
|
|
- OrderRecharge orderRecharge) {
|
|
|
- if (PayResult.success.getCode() == (response.getRefundResult())) {
|
|
|
- // 退款成功
|
|
|
- refundSuccess(refundOrder.getOrderNo());
|
|
|
- } else if (PayResult.fail.getCode() == (response.getRefundResult())) {
|
|
|
- // 退款失败
|
|
|
- refundError(refundOrder.getOrderNo());
|
|
|
- throw new ServiceException("退款失败:" + response.getPayMsg());
|
|
|
- } else {
|
|
|
- // 退款处理中,加入延迟队列
|
|
|
- addRefundDelayTask(refundOrder, orderRecharge);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 添加退款延迟任务
|
|
|
- */
|
|
|
- private void addRefundDelayTask(OrderRechargeRefund refundOrder,
|
|
|
- OrderRecharge orderRecharge) {
|
|
|
- PayRefundDTO refundDTO = new PayRefundDTO();
|
|
|
- refundDTO.setOrderNo(refundOrder.getOrderNo());
|
|
|
- refundDTO.setOutRequestNo(refundOrder.getRefundNo());
|
|
|
-
|
|
|
- DelayMessage delayMessage = new DelayMessage(
|
|
|
- refundDTO.getOutRequestNo(),
|
|
|
- DelayTagsEnum.ORDER_REUND_DELAY_QUEUE_TASK.getCode(),
|
|
|
- JSONUtil.toJsonStr(refundDTO)
|
|
|
- );
|
|
|
-
|
|
|
- delayQueueCache.addDelayJob(
|
|
|
- delayMessage,
|
|
|
- RefundQueryTimesEnum.getDelayTime(delayMessage.getPollingNum())
|
|
|
- );
|
|
|
- }
|
|
|
-
|
|
|
|
|
|
/**
|
|
|
* 批量删除充值订单
|
|
@@ -466,12 +411,8 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public OrderRecharge createRechargeOrder(OrderRechargeCreateDTO createDTO) {
|
|
|
+ public OrderPayResultVO createRechargeOrder(OrderRechargeCreateDTO createDTO) {
|
|
|
// 1. 校验参数
|
|
|
- if (createDTO.getRechargeTypeId() == null) {
|
|
|
- throw new ServiceException("请选择充值套餐");
|
|
|
- }
|
|
|
-
|
|
|
if (StringUtils.isEmpty(createDTO.getPayType())) {
|
|
|
throw new ServiceException("请选择支付方式");
|
|
|
}
|
|
@@ -483,15 +424,16 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
|
|
|
OrderRecharge orderRecharge = buildOrderRecharge(createDTO, packageInfo);
|
|
|
|
|
|
// 4. 处理支付
|
|
|
- handleRechargePayment(orderRecharge, createDTO);
|
|
|
-
|
|
|
- return orderRecharge;
|
|
|
+ return handleRechargePayment(orderRecharge, createDTO);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取充值套餐信息(包含活动)
|
|
|
*/
|
|
|
private RechargePackageInfo getRechargePackageInfo(Long rechargeTypeId, Long orgId) {
|
|
|
+ if (rechargeTypeId == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
// 1. 获取套餐基本信息
|
|
|
RechargeType rechargeType = rechargeTypeService.getById(rechargeTypeId);
|
|
|
if (rechargeType == null) {
|
|
@@ -523,30 +465,40 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
|
|
|
orderRecharge.setRechargeTypeId(createDTO.getRechargeTypeId());
|
|
|
orderRecharge.setOrderSource(createDTO.getOrderSource());
|
|
|
orderRecharge.setStoreId(createDTO.getOrgId());
|
|
|
+ orderRecharge.setRemark(createDTO.getRemark());
|
|
|
|
|
|
// 2. 设置支付信息
|
|
|
orderRecharge.setPayType(createDTO.getPayType());
|
|
|
orderRecharge.setOrderStatus(OrderRechargeStatus.NO_PAY.getCode());
|
|
|
|
|
|
// 3. 设置金额信息
|
|
|
- RechargeType rechargeType = packageInfo.getRechargeType();
|
|
|
- orderRecharge.setPayAmount(rechargeType.getRechargeAmount());
|
|
|
- orderRecharge.setRechargeAmount(rechargeType.getRechargeAmount());
|
|
|
- orderRecharge.setWelfareAmount(BigDecimal.ZERO);
|
|
|
-
|
|
|
- // 4. 设置赠送信息
|
|
|
- if (packageInfo.getActivityItem() != null) {
|
|
|
- // 如果有活动,使用活动的赠送金额
|
|
|
- orderRecharge.setGiveAmount(packageInfo.getActivityItem().getActivityGiveAmount());
|
|
|
- orderRecharge.setActivityId(packageInfo.getActivityItem().getActivityId());
|
|
|
+ if (packageInfo == null) {
|
|
|
+ //如果套餐为空,则是直接充值
|
|
|
+ orderRecharge.setPayAmount(createDTO.getPayAmount());
|
|
|
+ orderRecharge.setRechargeAmount(createDTO.getRechargeAmount());
|
|
|
+ orderRecharge.setGiveAmount(BigDecimal.ZERO);
|
|
|
+ orderRecharge.setGivePointAmount(0);
|
|
|
+ orderRecharge.setWelfareAmount(createDTO.getWelfareAmount());
|
|
|
} else {
|
|
|
- orderRecharge.setGiveAmount(rechargeType.getGiveAmount());
|
|
|
+ RechargeType rechargeType = packageInfo.getRechargeType();
|
|
|
+ orderRecharge.setPayAmount(rechargeType.getRechargeAmount());
|
|
|
+ orderRecharge.setRechargeAmount(rechargeType.getRechargeAmount());
|
|
|
+ orderRecharge.setWelfareAmount(BigDecimal.ZERO);
|
|
|
+
|
|
|
+ // 4. 设置赠送信息
|
|
|
+ if (packageInfo.getActivityItem() != null) {
|
|
|
+ // 如果有活动,使用活动的赠送金额
|
|
|
+ orderRecharge.setGiveAmount(packageInfo.getActivityItem().getActivityGiveAmount());
|
|
|
+ orderRecharge.setActivityId(packageInfo.getActivityItem().getActivityId());
|
|
|
+ } else {
|
|
|
+ orderRecharge.setGiveAmount(rechargeType.getGiveAmount());
|
|
|
+ }
|
|
|
+ orderRecharge.setGivePointAmount(rechargeType.getGivePointAmount());
|
|
|
}
|
|
|
- orderRecharge.setGivePointAmount(rechargeType.getGivePointAmount());
|
|
|
-
|
|
|
// 5. 设置支付渠道金额
|
|
|
initializePayChannelAmount(orderRecharge);
|
|
|
-
|
|
|
+ orderRecharge.setDelFlag(DeleteStatus.OK.getCode());
|
|
|
+ orderRecharge.buildCreateData();
|
|
|
save(orderRecharge);
|
|
|
return orderRecharge;
|
|
|
}
|
|
@@ -574,11 +526,16 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
|
|
|
/**
|
|
|
* 处理充值支付
|
|
|
*/
|
|
|
- private void handleRechargePayment(OrderRecharge orderRecharge, OrderRechargeCreateDTO createDTO) {
|
|
|
+ private OrderPayResultVO handleRechargePayment(OrderRecharge orderRecharge, OrderRechargeCreateDTO createDTO) {
|
|
|
+ OrderPayResultVO resultVO = new OrderPayResultVO();
|
|
|
+ resultVO.setOrderId(orderRecharge.getId());
|
|
|
+ resultVO.setOrderNo(orderRecharge.getOrderNo());
|
|
|
// 1. 现金支付直接完成
|
|
|
if (PayType.CASH.getCode().equals(createDTO.getPayType())) {
|
|
|
paySuccess(orderRecharge, null);
|
|
|
- return;
|
|
|
+ resultVO.setPayResult(200);
|
|
|
+ resultVO.setPayMsg("支付成功");
|
|
|
+ return resultVO;
|
|
|
}
|
|
|
|
|
|
// 2. APP支付
|
|
@@ -587,78 +544,27 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
|
|
|
orderRecharge,
|
|
|
createDTO.getPlatform()
|
|
|
);
|
|
|
- payService.appPay(payDTO);
|
|
|
- return;
|
|
|
+ AppPayRespVO appPayRespVO = payService.appPay(payDTO);
|
|
|
+ resultVO.setPayResult(0);
|
|
|
+ resultVO.setAppPayRespVO(appPayRespVO);
|
|
|
+ return resultVO;
|
|
|
}
|
|
|
|
|
|
// 3. 线下支付(微信/支付宝)
|
|
|
if (OrderSourceType.OFFLINE.getCode().equals(createDTO.getOrderSource())) {
|
|
|
- handleOfflinePayment(orderRecharge, createDTO);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 处理线下支付
|
|
|
- */
|
|
|
- private void handleOfflinePayment(OrderRecharge orderRecharge, OrderRechargeCreateDTO createDTO) {
|
|
|
- try {
|
|
|
- // 1. 创建支付订单
|
|
|
- OrderPayInfo payInfo = orderPayInfoService.createOrderPayInfo(
|
|
|
- orderRecharge.getStoreId(),
|
|
|
- orderRecharge.getOrderNo(),
|
|
|
- orderRecharge.getPayAmount(),
|
|
|
- orderRecharge.getPayType()
|
|
|
- );
|
|
|
-
|
|
|
// 2. 发起支付
|
|
|
- PayResponseDTO response = payService.faceToFacePay(
|
|
|
+ return payService.faceToFacePay(
|
|
|
PayOrderFaceToFaceDTO.createRechargeOrderPayData(
|
|
|
- payInfo.getRequestNo(),
|
|
|
- payInfo.getPayAmount(),
|
|
|
- payInfo.getPayType(),
|
|
|
+ orderRecharge.getOrderNo(),
|
|
|
+ orderRecharge.getPayAmount(),
|
|
|
+ orderRecharge.getPayType(),
|
|
|
createDTO.getAuthCode()
|
|
|
)
|
|
|
);
|
|
|
-
|
|
|
- // 3. 处理支付结果
|
|
|
- handlePaymentResponse(response, orderRecharge, payInfo);
|
|
|
-
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("线下支付异常", e);
|
|
|
- throw new ServiceException("支付失败,请重试");
|
|
|
}
|
|
|
+ return resultVO;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 处理支付结果
|
|
|
- */
|
|
|
- private void handlePaymentResponse(PayResponseDTO response, OrderRecharge orderRecharge,
|
|
|
- OrderPayInfo payInfo) {
|
|
|
-
|
|
|
- switch (PayResult.getPayResult(response.getPayResult())) {
|
|
|
- case success:
|
|
|
- // 支付成功
|
|
|
- paySuccess(orderRecharge, response.getOutTradeNo());
|
|
|
- delayQueueCache.deleteDelayJob(payInfo.getRequestNo());
|
|
|
- break;
|
|
|
-
|
|
|
- case fail:
|
|
|
- // 支付失败
|
|
|
- delayQueueCache.deleteDelayJob(payInfo.getRequestNo());
|
|
|
- throw new ServiceException(response.getPayMsg());
|
|
|
-
|
|
|
- default:
|
|
|
- // 支付中,加入延迟队列
|
|
|
- DelayMessage delayMessage = new DelayMessage(
|
|
|
- payInfo.getRequestNo(),
|
|
|
- DelayTagsEnum.ORDER_PAY_DELAY_QUEUE.getCode(),
|
|
|
- JSONUtil.toJsonStr(payInfo)
|
|
|
- );
|
|
|
- delayQueueCache.addDelayJob(delayMessage,
|
|
|
- PayQueryTimesEnum.getDelayTime(delayMessage.getPollingNum()));
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
/**
|
|
|
* 卡密充值处理
|
|
@@ -837,8 +743,8 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
|
|
|
|
|
|
@Override
|
|
|
public void paySuccess(OrderRecharge orderRecharge, String outTradeNo) {
|
|
|
- if (orderRecharge.getOrderStatus().equals(OrderRechargeStatus.YES_PAY.getCode()) || orderRecharge.getOrderStatus().equals(OrderRechargeStatus.REFUND.getCode())) {
|
|
|
- log.info("订单已支付或已退款,无需再次处理,订单号:{}", orderRecharge.getOrderNo());
|
|
|
+ if (orderRecharge.getPayStatus().equals(PayStatus.HAS_PAY.getCode()) ) {
|
|
|
+ log.error("订单已支付成功,无需再次处理,订单号:{}", orderRecharge.getOrderNo());
|
|
|
return;
|
|
|
}
|
|
|
Date date = DateUtils.getNowDate();
|
|
@@ -859,6 +765,7 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
|
|
|
orderRecharge.setOutTradeOrderNo(outTradeNo);
|
|
|
orderRecharge.setOrderStatus(OrderRechargeStatus.YES_PAY.getCode());
|
|
|
orderRecharge.setPayTime(payTime);
|
|
|
+ orderRecharge.setPayStatus(PayStatus.HAS_PAY.getCode());
|
|
|
try {
|
|
|
this.updateById(orderRecharge);
|
|
|
} catch (Exception e) {
|
|
@@ -878,6 +785,7 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
|
|
|
billMstrOrderDTO.setWelfarePayAmount(orderRecharge.getWelfareAmount());
|
|
|
billMstrOrderDTO.setGivePayAmount(orderRecharge.getGiveAmount());
|
|
|
billMstrOrderDTO.setRechargeCardNo(orderRecharge.getRechargeCardNo());
|
|
|
+ billMstrOrderDTO.setPayType(orderRecharge.getPayType());
|
|
|
BigDecimal totalPayAmount = CurrencyUtil.add(orderRecharge.getRechargeAmount(), orderRecharge.getGiveAmount(), orderRecharge.getWelfareAmount());
|
|
|
billMstrOrderDTO.setPayTotalAmount(totalPayAmount);
|
|
|
billMstrOrderDTO.setRemark("充值卡:" + rechargePasswordCard.getCardNo() + ",储值到账" + totalPayAmount + "元");
|
|
@@ -963,6 +871,7 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
|
|
|
orderRecharge.setPayType(PayType.RECHARGE_CARD.getCode());
|
|
|
orderRecharge.setDelFlag(DeleteStatus.OK.getCode());
|
|
|
orderRecharge.setOrderStatus(OrderRechargeStatus.YES_PAY.getCode());
|
|
|
+ orderRecharge.setPayStatus(PayStatus.HAS_PAY.getCode());
|
|
|
orderRecharge.setOrderSource(orderRechargeCreateDTO.getOrderSource());
|
|
|
orderRecharge.setRechargeCardNo(rechargePasswordCard.getCardNo());
|
|
|
orderRecharge.setPayAmount(rechargePasswordCard.getRechargeAmount());
|
|
@@ -1019,6 +928,7 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
|
|
|
return;
|
|
|
}
|
|
|
orderRecharge.setOrderStatus(OrderRechargeStatus.YES_PAY.getCode());
|
|
|
+ orderRecharge.setPayStatus(PayStatus.HAS_PAY.getCode());
|
|
|
orderRecharge.setPayTime(date);
|
|
|
this.updateById(orderRecharge);
|
|
|
// 同步生成密码卡
|
|
@@ -1335,74 +1245,6 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 处理退款
|
|
|
- */
|
|
|
- private void processRefund(OrderRecharge orderRecharge, OrderRechargeRefund refundOrder) {
|
|
|
- // 现金退款直接完成
|
|
|
- if (PayType.CASH.getCode().equals(orderRecharge.getPayType())) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- // 构建退款请求
|
|
|
- PayRefundDTO refundDTO = buildRefundRequest(orderRecharge, refundOrder);
|
|
|
-
|
|
|
- // 发起退款
|
|
|
- RefundResponseDTO response = payService.refundApply(refundDTO);
|
|
|
-
|
|
|
- // 处理退款结果
|
|
|
- handleRefundResponse(response, refundOrder.getRefundNo());
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 构建退款请求
|
|
|
- */
|
|
|
- private PayRefundDTO buildRefundRequest(OrderRecharge orderRecharge,
|
|
|
- OrderRechargeRefund refundOrder) {
|
|
|
- PayRefundDTO refundDTO = new PayRefundDTO();
|
|
|
- refundDTO.setPayType(orderRecharge.getPayType());
|
|
|
- refundDTO.setOrderNo(orderRecharge.getOrderNo());
|
|
|
- refundDTO.setRefundAmount(refundOrder.getRefundAmount());
|
|
|
- refundDTO.setOutRequestNo(refundOrder.getRefundNo());
|
|
|
- refundDTO.setOutTradeNo(orderRecharge.getOutTradeOrderNo());
|
|
|
- refundDTO.setRefundReason(refundOrder.getRefundReason());
|
|
|
- refundDTO.setTotalAmount(orderRecharge.getPayAmount());
|
|
|
- refundDTO.setStoreId(orderRecharge.getStoreId());
|
|
|
- return refundDTO;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 处理退款响应
|
|
|
- */
|
|
|
- private void handleRefundResponse(RefundResponseDTO response, String refundNo) {
|
|
|
- if (PayResult.success.getCode() == (response.getRefundResult())) {
|
|
|
- // 退款成功
|
|
|
- refundSuccess(refundNo);
|
|
|
- } else if (PayResult.fail.getCode() == (response.getRefundResult())) {
|
|
|
- // 退款失败
|
|
|
- refundError(refundNo);
|
|
|
- throw new ServiceException("退款失败:" + response.getPayMsg());
|
|
|
- } else {
|
|
|
- // 退款处理中,加入延迟队列
|
|
|
- addRefundDelayTask(refundNo);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 添加退款延迟任务
|
|
|
- */
|
|
|
- private void addRefundDelayTask(String refundNo) {
|
|
|
- DelayMessage delayMessage = new DelayMessage(
|
|
|
- refundNo,
|
|
|
- DelayTagsEnum.ORDER_REUND_DELAY_QUEUE_TASK.getCode(),
|
|
|
- JSONUtil.toJsonStr(refundNo)
|
|
|
- );
|
|
|
-
|
|
|
- delayQueueCache.addDelayJob(
|
|
|
- delayMessage,
|
|
|
- RefundQueryTimesEnum.getDelayTime(delayMessage.getPollingNum())
|
|
|
- );
|
|
|
- }
|
|
|
|
|
|
@Override
|
|
|
public R refundSuccess(String orderNo) {
|
|
@@ -1410,28 +1252,52 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
|
|
|
if (orderRecharge == null) {
|
|
|
throw new ServiceException("未查询到订单");
|
|
|
}
|
|
|
- if (orderRecharge.getRefundStatus() != OrderRefundStatus.REFUNDING.getCode()
|
|
|
- && orderRecharge.getRefundStatus() != OrderRefundStatus.REFUND_APPLYING.getCode()
|
|
|
- && orderRecharge.getRefundStatus() != OrderRefundStatus.ERROR.getCode()) {//退款状态不正确,直接跳过
|
|
|
- return R.ok();
|
|
|
+ if (orderRecharge.getRefundStatus() == OrderRefundStatus.REFUNDING.getCode()
|
|
|
+ || orderRecharge.getRefundStatus() == OrderRefundStatus.REFUND_SUCCESS.getCode()) {//退款状态不正确,直接跳过
|
|
|
+ throw new ServiceException("当前退款状态不正确");
|
|
|
}
|
|
|
|
|
|
- orderRecharge.setRefundStatus(OrderRefundStatus.REFUND_SUCCESS.getCode());
|
|
|
+ orderRecharge.setRefundStatus(RechargeRefundStatusType.REFUND_AGREE.getCode());
|
|
|
this.updateById(orderRecharge);
|
|
|
|
|
|
+ //查询退款订单
|
|
|
+ OrderRechargeRefund orderRechargeRefund = orderRechargeRefundService.selectOrderRechargeOrderNo(orderNo);
|
|
|
+ // 3. 更新退款申请状态
|
|
|
+ orderRechargeRefund.setRefundStatus(RechargeRefundStatusType.REFUND_AGREE.getCode());
|
|
|
+ orderRechargeRefundService.updateById(orderRechargeRefund);
|
|
|
+
|
|
|
RechargePasswordCard rechargePasswordCard = rechargePasswordCardService.getOne(new QueryWrapper<RechargePasswordCard>().lambda()
|
|
|
.eq(RechargePasswordCard::getOrderNo, orderRecharge.getOrderNo())
|
|
|
.eq(RechargePasswordCard::getDelFlag, DeleteStatus.OK.getCode()), Boolean.FALSE);
|
|
|
if (rechargePasswordCard == null) {
|
|
|
log.error("充值卡退款成功,订单不存在:" + orderNo);
|
|
|
- throw new GlobalException("充值卡不存在");
|
|
|
+ throw new ServiceException("充值卡不存在");
|
|
|
}
|
|
|
rechargePasswordCard.setRechargeStatus(RechargeStatusType.REFUND.getCode());
|
|
|
rechargePasswordCardService.updateById(rechargePasswordCard);
|
|
|
//退用户积分
|
|
|
appUserPointLogService.reducePoint(orderRecharge.getAppUserId(), orderRecharge.getGivePointAmount().intValue(), orderRecharge.getOrderNo(), MemberPointSourceEnum.REFUND_DEDUCT, "会员储值退款扣除");
|
|
|
//此处添加退款记录
|
|
|
- appUserBillMstrService.save(appUserBillMstrService.buildBillMstr(ConsumeOrderDTO.buildOrderRechargeRefundData(orderRecharge)));
|
|
|
+
|
|
|
+ BillMstrOrderDTO billMstrOrderDTO = new BillMstrOrderDTO();
|
|
|
+ billMstrOrderDTO.setAppUserId(orderRecharge.getAppUserId());
|
|
|
+ billMstrOrderDTO.setStoreId(orderRecharge.getStoreId());
|
|
|
+ billMstrOrderDTO.setOrderNo(orderRecharge.getOrderNo());
|
|
|
+ billMstrOrderDTO.setOrderType(OrderType.recharge.getCode());
|
|
|
+ billMstrOrderDTO.setRechargePayAmount(orderRecharge.getRechargeAmount());
|
|
|
+ billMstrOrderDTO.setUseBindStoreId(rechargePasswordCard.getUseBindStoreId());
|
|
|
+ billMstrOrderDTO.setWelfarePayAmount(orderRechargeRefund.getWelfareBalance());
|
|
|
+ billMstrOrderDTO.setGivePayAmount(orderRechargeRefund.getWelfareBalance());
|
|
|
+ billMstrOrderDTO.setRechargeCardNo(orderRecharge.getRechargeCardNo());
|
|
|
+ billMstrOrderDTO.setPayType(orderRecharge.getPayType());
|
|
|
+ billMstrOrderDTO.setPayTotalAmount(orderRechargeRefund.getRefundAmount());
|
|
|
+ billMstrOrderDTO.setRemark("充值卡:" + rechargePasswordCard.getCardNo() + ",退款" + orderRechargeRefund.getRefundAmount() + "元");
|
|
|
+ try {
|
|
|
+ billMstrOrderService.saveRefundBillMstrOrder(billMstrOrderDTO);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("保存消费日志失败,订单号:{}", orderRecharge.getOrderNo(), e);
|
|
|
+ throw new ServiceException("保存消费日志失败");
|
|
|
+ }
|
|
|
log.debug("充值订单{}" + orderNo + "退款完成");
|
|
|
return R.ok();
|
|
|
}
|
|
@@ -1449,12 +1315,9 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
|
|
|
|
|
|
@Override
|
|
|
public R refundError(String orderNo) {
|
|
|
- OrderRecharge orderRecharge = getOne(new QueryWrapper<OrderRecharge>().lambda().eq(OrderRecharge::getOrderNo, orderNo));
|
|
|
- if (orderRecharge == null) {
|
|
|
- throw new ServiceException("未查询到订单");
|
|
|
- }
|
|
|
- orderRecharge.setRefundStatus(OrderRefundStatus.ERROR.getCode());
|
|
|
- updateById(orderRecharge);
|
|
|
+ OrderRechargeRefund orderRechargeRefund = orderRechargeRefundService.selectOrderRechargeOrderNo(orderNo);
|
|
|
+ orderRechargeRefund.setRefundStatus(OrderRefundStatus.ERROR.getCode());
|
|
|
+ orderRechargeRefundService.updateById(orderRechargeRefund);
|
|
|
return R.ok();
|
|
|
}
|
|
|
|