|
@@ -7,6 +7,7 @@ import java.util.stream.Collectors;
|
|
|
|
|
|
import cn.binarywang.wx.miniapp.bean.express.result.WxMaExpressOrderInfoResult;
|
|
|
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.yiqi.app.domain.AppGoodsMarket;
|
|
@@ -99,6 +100,8 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
|
|
|
private IOrderPayInfoService orderPayInfoService;
|
|
|
@Autowired
|
|
|
private DelayQueueCache delayQueueCache;
|
|
|
+ @Autowired
|
|
|
+ private IOrderGoodsRefundService orderGoodsRefundService;
|
|
|
|
|
|
//<editor-folder desc="基础韩素">
|
|
|
|
|
@@ -624,13 +627,64 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
|
|
|
orderGoods.buildUpdateData();
|
|
|
baseMapper.updateById(orderGoods);
|
|
|
|
|
|
- // 退款内容
|
|
|
- appUserBillMstrService.refundRecord(ConsumeOrderDTO.buildOrderGoodsRefundData(orderGoods), new RefundBaseDTO(orderNoUtils.getGoodsOrderNo()));
|
|
|
+ OrderGoodsRefund orderGoodsRefund = new OrderGoodsRefund();
|
|
|
+ BeanUtils.copyProperties(orderGoods, orderGoodsRefund);
|
|
|
+ orderGoodsRefund.setId(null);
|
|
|
+ orderGoodsRefund.setRefundNo(orderNoUtils.getGoodsOrderNo());
|
|
|
+ orderGoodsRefund.setRefundAmount(orderGoods.getRefundAmount());
|
|
|
+ orderGoodsRefund.setRefundApplyTime(DateUtils.getNowDate());
|
|
|
+ orderGoodsRefund.setRefundReason(orderGoodsRefundDTO.getRefundReason());
|
|
|
+ orderGoodsRefund.setRefundStatus(OrderRefundStatus.REFUND_APPLYING.getCode());
|
|
|
+ orderGoodsRefundService.save(orderGoodsRefund);
|
|
|
+
|
|
|
+ // 退款
|
|
|
+ if (orderGoods.getPayType().equals(PayType.CASH.getCode())) {
|
|
|
+ refundSuccess(orderGoodsRefund.getRefundNo(), orderGoods.getOrderNo());
|
|
|
+ }
|
|
|
+ if (orderGoods.getPayType().equals(PayType.BALANCE.getCode())) {
|
|
|
+ //充值卡支付退单
|
|
|
+ Boolean res = rechargePasswordCardService.orderRefundByBalance(orderGoods.getOrderNo(), orderGoods.getRefundAmount());
|
|
|
+ if (res) {
|
|
|
+ refundSuccess(orderGoodsRefund.getRefundNo(), orderGoods.getOrderNo());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (orderGoods.getPayType().equals(PayType.WECHAT.getCode()) || orderGoods.getPayType().equals(PayType.ALIPAY.getCode())) {
|
|
|
+ PayRefundDTO payRefundDTO = new PayRefundDTO(orderGoods.getPayType(), orderGoods.getOrderNo(), orderGoods.getPayAmount(), orderGoodsRefund.getRefundNo(), orderGoods.getOutTradeOrderNo(), orderGoodsRefundDTO.getRefundReason());
|
|
|
+ //执行微信退款逻辑
|
|
|
+ payRefundDTO.setTotalAmount(orderGoods.getPayAmount());
|
|
|
+ payRefundDTO.setStoreId(orderGoods.getOrgId());
|
|
|
+ RefundResponseDTO refundResponse = payService.refundApply(payRefundDTO);
|
|
|
+
|
|
|
+ if (refundResponse.getRefundResult().equals(PayResult.success.getCode())) {
|
|
|
+ refundSuccess(orderGoodsRefund.getRefundNo(), orderGoods.getOrderNo());
|
|
|
+ } else if (refundResponse.getRefundResult().equals(PayResult.fail.getCode())) {
|
|
|
+ refundError(orderGoods.getOrderNo());
|
|
|
+ } else {
|
|
|
+ //增加到延迟支付查询队列
|
|
|
+ DelayMessage delayMessage = new DelayMessage(payRefundDTO.getOutRequestNo(), DelayTagsEnum.ORDER_REUND_DELAY_QUEUE_TASK.getCode(), JSONUtil.toJsonStr(payRefundDTO));
|
|
|
+ //暂不执行
|
|
|
+ delayQueueCache.addDelayJob(delayMessage, RefundQueryTimesEnum.getDelayTime(delayMessage.getPollingNum()));
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+// // 退款内容
|
|
|
+// appUserBillMstrService.refundRecord(ConsumeOrderDTO.buildOrderGoodsRefundData(orderGoods), new RefundBaseDTO(orderNoUtils.getGoodsOrderNo()));
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public R refundSuccess(String orderNo) {
|
|
|
+ public R refundSuccess(String refundNo, String orderNo) {
|
|
|
+ if (StrUtil.isNotBlank(refundNo)) {
|
|
|
+ OrderGoodsRefund orderGoodsRefund = orderGoodsRefundService.getOrderClothRefundByRefundNo(refundNo);
|
|
|
+ orderGoodsRefund.setRefundStatus(OrderRefundStatus.REFUND_SUCCESS.getCode());
|
|
|
+ orderGoodsRefund.setRefundTime(DateUtils.getNowDate());
|
|
|
+ orderGoodsRefundService.updateById(orderGoodsRefund);
|
|
|
+ if (orderNo == null) {
|
|
|
+ orderNo = orderGoodsRefund.getOrderNo();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
OrderGoods orderGoods = this.getOne(new QueryWrapper<OrderGoods>().lambda().eq(OrderGoods::getOrderNo, orderNo));
|
|
|
if (orderGoods == null) {
|
|
|
throw new GlobalException("订单不存在");
|
|
@@ -662,7 +716,17 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public R refundClosed(String orderNo) {
|
|
|
+ public R refundClosed(String refundNo, String orderNo) {
|
|
|
+ if (StrUtil.isNotBlank(refundNo)) {
|
|
|
+ OrderGoodsRefund orderGoodsRefund = orderGoodsRefundService.getOrderClothRefundByRefundNo(refundNo);
|
|
|
+ orderGoodsRefund.setRefundStatus(OrderRefundStatus.REFUND_SUCCESS.getCode());
|
|
|
+ orderGoodsRefund.setRefundTime(DateUtils.getNowDate());
|
|
|
+ orderGoodsRefundService.updateById(orderGoodsRefund);
|
|
|
+ if (orderNo == null) {
|
|
|
+ orderNo = orderGoodsRefund.getOrderNo();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
OrderGoods orderGoods = this.getOne(new QueryWrapper<OrderGoods>().lambda().eq(OrderGoods::getOrderNo, orderNo));
|
|
|
if (orderGoods == null) {
|
|
|
throw new GlobalException("订单不存在");
|
|
@@ -673,7 +737,17 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public R refundError(String orderNo) {
|
|
|
+ public R refundError(String refundNo, String orderNo) {
|
|
|
+ if (StrUtil.isNotBlank(refundNo)) {
|
|
|
+ OrderGoodsRefund orderGoodsRefund = orderGoodsRefundService.getOrderClothRefundByRefundNo(refundNo);
|
|
|
+ orderGoodsRefund.setRefundStatus(OrderRefundStatus.REFUND_SUCCESS.getCode());
|
|
|
+ orderGoodsRefund.setRefundTime(DateUtils.getNowDate());
|
|
|
+ orderGoodsRefundService.updateById(orderGoodsRefund);
|
|
|
+ if (orderNo == null) {
|
|
|
+ orderNo = orderGoodsRefund.getOrderNo();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
OrderGoods orderGoods = this.getOne(new QueryWrapper<OrderGoods>().lambda().eq(OrderGoods::getOrderNo, orderNo));
|
|
|
if (orderGoods == null) {
|
|
|
throw new GlobalException("订单不存在");
|
|
@@ -712,8 +786,49 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
|
|
|
orderGoods.buildUpdateData();
|
|
|
baseMapper.updateById(orderGoods);
|
|
|
|
|
|
- // 退款流程
|
|
|
- appUserBillMstrService.refundRecord(ConsumeOrderDTO.buildOrderGoodsRefundData(orderGoods), new RefundBaseDTO(orderNoUtils.getGoodsOrderNo()));
|
|
|
+ OrderGoodsRefund orderGoodsRefund = new OrderGoodsRefund();
|
|
|
+ BeanUtils.copyProperties(orderGoods, orderGoodsRefund);
|
|
|
+ orderGoodsRefund.setId(null);
|
|
|
+ orderGoodsRefund.setRefundNo(orderNoUtils.getGoodsOrderNo());
|
|
|
+ orderGoodsRefund.setRefundAmount(orderGoods.getRefundAmount());
|
|
|
+ orderGoodsRefund.setRefundApplyTime(DateUtils.getNowDate());
|
|
|
+ orderGoodsRefund.setRefundReason(null);
|
|
|
+ orderGoodsRefund.setRefundStatus(OrderRefundStatus.REFUND_APPLYING.getCode());
|
|
|
+ orderGoodsRefundService.save(orderGoodsRefund);
|
|
|
+
|
|
|
+ // 退款
|
|
|
+ if (orderGoods.getPayType().equals(PayType.CASH.getCode())) {
|
|
|
+ refundSuccess(orderGoodsRefund.getRefundNo(), orderGoods.getOrderNo());
|
|
|
+ }
|
|
|
+ if (orderGoods.getPayType().equals(PayType.BALANCE.getCode())) {
|
|
|
+ //充值卡支付退单
|
|
|
+ Boolean res = rechargePasswordCardService.orderRefundByBalance(orderGoods.getOrderNo(), orderGoods.getRefundAmount());
|
|
|
+ if (res) {
|
|
|
+ refundSuccess(orderGoodsRefund.getRefundNo(), orderGoods.getOrderNo());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (orderGoods.getPayType().equals(PayType.WECHAT.getCode()) || orderGoods.getPayType().equals(PayType.ALIPAY.getCode())) {
|
|
|
+ PayRefundDTO payRefundDTO = new PayRefundDTO(orderGoods.getPayType(), orderGoods.getOrderNo(), orderGoods.getPayAmount(), orderGoodsRefund.getRefundNo(), orderGoods.getOutTradeOrderNo(), null);
|
|
|
+ //执行微信退款逻辑
|
|
|
+ payRefundDTO.setTotalAmount(orderGoods.getPayAmount());
|
|
|
+ payRefundDTO.setStoreId(orderGoods.getOrgId());
|
|
|
+ RefundResponseDTO refundResponse = payService.refundApply(payRefundDTO);
|
|
|
+
|
|
|
+ if (refundResponse.getRefundResult().equals(PayResult.success.getCode())) {
|
|
|
+ refundSuccess(orderGoodsRefund.getRefundNo(), orderGoods.getOrderNo());
|
|
|
+ } else if (refundResponse.getRefundResult().equals(PayResult.fail.getCode())) {
|
|
|
+ refundError(orderGoodsRefund.getRefundNo(), orderGoods.getOrderNo());
|
|
|
+ } else {
|
|
|
+ //增加到延迟支付查询队列
|
|
|
+ DelayMessage delayMessage = new DelayMessage(payRefundDTO.getOutRequestNo(), DelayTagsEnum.ORDER_REUND_DELAY_QUEUE_TASK.getCode(), JSONUtil.toJsonStr(payRefundDTO));
|
|
|
+ //暂不执行
|
|
|
+ delayQueueCache.addDelayJob(delayMessage, RefundQueryTimesEnum.getDelayTime(delayMessage.getPollingNum()));
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+// // 退款流程
|
|
|
+// appUserBillMstrService.refundRecord(ConsumeOrderDTO.buildOrderGoodsRefundData(orderGoods), new RefundBaseDTO(orderNoUtils.getGoodsOrderNo()));
|
|
|
return 1;
|
|
|
}
|
|
|
|