feat/refactor(orders.manager):新增取消派单中的订单的功能, 整合相关取消订单功能的代码到取消订单业务类

This commit is contained in:
JIAN 2024-09-13 00:36:56 +08:00
parent f3604d9830
commit e78ff52701
11 changed files with 275 additions and 125 deletions

View File

@ -1,15 +1,17 @@
package com.jzo2o.orders.base.model.domain;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* <p>
* 订单退款表
@ -19,6 +21,7 @@ import lombok.experimental.Accessors;
* @since 2023-09-07
*/
@Data
@Builder
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("orders_refund")
@ -46,6 +49,4 @@ public class OrdersRefund implements Serializable {
* 创建时间
*/
private LocalDateTime createTime;
}
}

View File

@ -31,6 +31,7 @@ public class OrderUpdateStatusDTO {
* 支付状态
*/
private Integer payStatus;
/**
* 退款状态
*/
@ -56,6 +57,16 @@ public class OrderUpdateStatusDTO {
*/
private String transactionId;
/**
* 支付服务退款单号
*/
private Long refundNo;
/**
* 第三方支付的退款单号
*/
private String refundId;
/**
* 支付渠道
*/
@ -70,4 +81,4 @@ public class OrderUpdateStatusDTO {
* 评价状态
*/
private Integer evaluationStatus;
}
}

View File

@ -31,6 +31,8 @@ public class OrdersCommonServiceImpl extends ServiceImpl<OrdersMapper, Orders> i
.set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getTransactionId()), Orders::getTransactionId, orderUpdateStatusReqDTO.getTransactionId())
.set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getTradingChannel()), Orders::getTradingChannel, orderUpdateStatusReqDTO.getTradingChannel())
.set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getRefundStatus()), Orders::getRefundStatus, orderUpdateStatusReqDTO.getRefundStatus())
.set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getRefundNo()), Orders::getRefundNo, orderUpdateStatusReqDTO.getRefundNo())
.set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getRefundId()), Orders::getRefundId, orderUpdateStatusReqDTO.getRefundId())
.update();
}
}

View File

@ -12,6 +12,7 @@ import com.jzo2o.orders.manager.model.dto.request.OrdersPayReqDTO;
import com.jzo2o.orders.manager.model.dto.request.PlaceOrderReqDTO;
import com.jzo2o.orders.manager.model.dto.response.OrdersPayResDTO;
import com.jzo2o.orders.manager.model.dto.response.PlaceOrderResDTO;
import com.jzo2o.orders.manager.service.IOrdersCanceledService;
import com.jzo2o.orders.manager.service.IOrdersCreateService;
import com.jzo2o.orders.manager.service.IOrdersManagerService;
import io.swagger.annotations.Api;
@ -30,11 +31,12 @@ import java.util.List;
@Api(tags = "用户端 - 订单相关接口")
@RequestMapping("/consumer/orders")
public class ConsumerOrdersController {
@Resource
private IOrdersManagerService ordersManagerService;
@Resource
private IOrdersCreateService ordersCreateService;
@Resource
private IOrdersManagerService ordersManagerService;
@Resource
private IOrdersCanceledService ordersCanceledService;
@GetMapping("/{id}")
@ApiOperation("根据订单id查询")
@ -94,7 +96,7 @@ public class ConsumerOrdersController {
throw new RequestUnauthorizedException("无法获取当前用户信息");
}
ordersManagerService.cancel(OrderCancelDTO.builder()
ordersCanceledService.cancel(OrderCancelDTO.builder()
.id(orderCancelReqDTO.getId())
.cancelReason(orderCancelReqDTO.getCancelReason())
.currentUserId(currentUser.getId())

View File

@ -2,9 +2,12 @@ package com.jzo2o.orders.manager.job;
import com.jzo2o.common.utils.CollUtils;
import com.jzo2o.orders.base.model.domain.Orders;
import com.jzo2o.orders.base.model.domain.OrdersRefund;
import com.jzo2o.orders.manager.service.IOrdersCanceledService;
import com.jzo2o.orders.manager.service.IOrdersManagerService;
import com.xxl.job.core.context.XxlJobHelper;
import com.jzo2o.orders.manager.service.IOrdersRefundService;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.transaction.support.TransactionTemplate;
@ -15,24 +18,40 @@ import java.util.List;
* 自动轮询取消订单
* @author JIAN
*/
@Slf4j
@Component
@SuppressWarnings("unused")
public class OrderCancelJob {
@Resource
private IOrdersManagerService ordersManagerService;
@Resource
private IOrdersRefundService ordersRefundService;
@Resource
private IOrdersCanceledService ordersCanceledService;
@Resource
private TransactionTemplate transactionTemplate;
@XxlJob("cancelPayOverTimeOrder")
public void cancelPayOverTimeOrder() {
List<Orders> orderList = ordersManagerService.getPayOverTimeOrder(100);
if (CollUtils.isEmpty(orderList)) {
XxlJobHelper.log("没有超时订单");
log.info("没有超时订单");
return;
}
// 取消所有超时未支付订单
transactionTemplate.executeWithoutResult(status ->
orderList.forEach(order -> ordersManagerService.cancelPayOverTimeOrder(order.getId())));
orderList.forEach(order -> ordersCanceledService.cancelPayOverTimeOrder(order.getId())));
}
@XxlJob("handlerRefundOrder")
public void handlerRefundOrder() {
List<OrdersRefund> refundRecords = ordersRefundService.queryRefundOrderListByCount(100);
if (CollUtils.isEmpty(refundRecords)) {
log.info("没有正在退款的订单");
}
transactionTemplate.executeWithoutResult(status ->
refundRecords.forEach(ordersRefundService::refundOrderByRefundRecord));
}
}

View File

@ -2,6 +2,7 @@ package com.jzo2o.orders.manager.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jzo2o.orders.base.model.domain.OrdersCanceled;
import com.jzo2o.orders.manager.model.dto.OrderCancelDTO;
/**
* <p>
@ -12,5 +13,14 @@ import com.jzo2o.orders.base.model.domain.OrdersCanceled;
* @since 2023-08-19
*/
public interface IOrdersCanceledService extends IService<OrdersCanceled> {
/**
* 取消订单
*/
void cancel(OrderCancelDTO orderCancelDTO);
}
/**
* 系统取消超时订单(无前置判断)
* <br><b>仅内部使用!!!</b>
*/
void cancelPayOverTimeOrder(Long id);
}

View File

@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.jzo2o.api.orders.dto.response.OrderResDTO;
import com.jzo2o.api.orders.dto.response.OrderSimpleResDTO;
import com.jzo2o.orders.base.model.domain.Orders;
import com.jzo2o.orders.manager.model.dto.OrderCancelDTO;
import java.util.List;
@ -43,17 +42,6 @@ public interface IOrdersManagerService extends IService<Orders> {
*/
void evaluationOrder(Long ordersId);
/**
* 取消订单
*/
void cancel(OrderCancelDTO orderCancelDTO);
/**
* 系统取消超时订单(无前置判断)
* <br><b>仅内部使用!!!</b>
*/
void cancelPayOverTimeOrder(Long id);
/**
* 获取支付超时订单
* @param count 订单数量

View File

@ -2,6 +2,7 @@ package com.jzo2o.orders.manager.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jzo2o.orders.base.model.domain.OrdersRefund;
import com.jzo2o.orders.manager.model.dto.OrderCancelDTO;
import java.util.List;
@ -21,4 +22,16 @@ public interface IOrdersRefundService extends IService<OrdersRefund> {
* @param count 数量
*/
List<OrdersRefund> queryRefundOrderListByCount(Integer count);
}
/**
* 保存退款记录信息
* <br/><b>仅供内部使用!!!</b>
*/
boolean saveRefundInfo(OrderCancelDTO orderRefundInfo);
/**
* 通过订单退款信息退款(内部无校验)
* <br/><b>仅供内部使用!!!</b>
*/
void refundOrderByRefundRecord(OrdersRefund refundRecord);
}

View File

@ -1,20 +1,150 @@
package com.jzo2o.orders.manager.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.jzo2o.api.trade.TradingApi;
import com.jzo2o.api.trade.dto.response.TradingResDTO;
import com.jzo2o.api.trade.enums.TradingStateEnum;
import com.jzo2o.common.constants.UserType;
import com.jzo2o.common.expcetions.DBException;
import com.jzo2o.common.expcetions.ForbiddenOperationException;
import com.jzo2o.common.utils.ObjectUtils;
import com.jzo2o.orders.base.enums.OrderRefundStatusEnum;
import com.jzo2o.orders.base.enums.OrderStatusEnum;
import com.jzo2o.orders.base.mapper.OrdersCanceledMapper;
import com.jzo2o.orders.base.model.domain.Orders;
import com.jzo2o.orders.base.model.domain.OrdersCanceled;
import com.jzo2o.orders.base.model.domain.OrdersRefund;
import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
import com.jzo2o.orders.base.service.IOrdersCommonService;
import com.jzo2o.orders.manager.model.dto.OrderCancelDTO;
import com.jzo2o.orders.manager.service.IOrdersCanceledService;
import com.jzo2o.orders.manager.service.IOrdersManagerService;
import com.jzo2o.orders.manager.service.IOrdersRefundService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.support.TransactionTemplate;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* <p>
* 订单取消服务实现类
* 订单取消服务实现类
* </p>
*
* @author itcast
* @since 2023-08-19
*/
@Service
public class OrdersCanceledServiceImpl extends ServiceImpl<OrdersCanceledMapper, OrdersCanceled> implements IOrdersCanceledService {
@Resource
private IOrdersCommonService ordersCommonService;
@Resource
private IOrdersManagerService ordersManagerService;
@Resource
private IOrdersRefundService ordersRefundService;
@Resource
private TransactionTemplate transactionTemplate;
@Resource
private TradingApi tradingApi;
}
@Override
public void cancel(OrderCancelDTO orderCancelDTO) {
Long orderId = orderCancelDTO.getId();
Orders orders = ordersManagerService.getById(orderId);
if (ObjectUtils.isEmpty(orders)) {
throw new ForbiddenOperationException("订单不存在无法取消");
}
// 补充前端无法确定的字段
orderCancelDTO.setServeStartTime(orders.getServeStartTime());
orderCancelDTO.setRealPayAmount(/*orders.getRealPayAmount() 测试统一使用0.01元*/ new BigDecimal("0.01"));
orderCancelDTO.setCityCode(orders.getCityCode());
orderCancelDTO.setTradingOrderNo(orders.getTradingOrderNo());
Integer ordersStatus = orders.getOrdersStatus();
if (OrderStatusEnum.NO_PAY.getStatus().equals(ordersStatus)) {
// 1. 未支付订单 -> 取消状态
cancelNoPayOrder(orderCancelDTO);
} else if (OrderStatusEnum.DISPATCHING.getStatus().equals(ordersStatus)) {
// 2. 已支付订单 -> 关闭状态 + 退款
cancelDispatchingOrder(orderCancelDTO);
} else {
throw new ForbiddenOperationException("订单无法取消");
}
}
@Override
public void cancelPayOverTimeOrder(Long id) {
// 二次确认防止在此期间支付
TradingResDTO tradingResDTO = tradingApi.findTradResultByTradingOrderNo(id);
if (ObjectUtils.isEmpty(tradingResDTO) || tradingResDTO.getTradingState() != TradingStateEnum.YJS) {
cancelNoPayOrder(OrderCancelDTO.builder()
.id(id)
.cancelReason("订单超时未支付自动取消")
.currentUserId(-1L)
.currentUserName("SYSTEM")
.currentUserType(UserType.SYSTEM)
.build());
}
}
private void cancelNoPayOrder(OrderCancelDTO orderCancelDTO) {
transactionTemplate.executeWithoutResult(status -> {
if (!saveCancelInfo(orderCancelDTO)) {
throw new DBException("订单取消表记录表更新失败");
}
if (!ordersCommonService.updateStatus(OrderUpdateStatusDTO.builder()
.id(orderCancelDTO.getId())
.originStatus(OrderStatusEnum.NO_PAY.getStatus())
.targetStatus(OrderStatusEnum.CANCELED.getStatus())
.build())) {
throw new DBException("订单表订单状态更新失败");
}
});
}
private void cancelDispatchingOrder(OrderCancelDTO orderCancelDTO) {
Long orderId = orderCancelDTO.getId();
// 更新数据库信息
// 1. 订单状态信息 2. 取消记录表 2. 退款记录表
transactionTemplate.executeWithoutResult(status -> {
if (!saveCancelInfo(orderCancelDTO)) {
throw new DBException("订单取消记录表更新失败");
}
if (!ordersRefundService.saveRefundInfo(orderCancelDTO)) {
throw new DBException("订单退款记录表更新失败");
}
if (!ordersCommonService.updateStatus(OrderUpdateStatusDTO.builder()
.id(orderId)
.originStatus(OrderStatusEnum.DISPATCHING.getStatus())
.targetStatus(OrderStatusEnum.CLOSED.getStatus())
.refundStatus(OrderRefundStatusEnum.REFUNDING.getStatus())
.build())) {
throw new DBException("订单表订单状态更新失败");
}
});
// 启动新线程执行退款任务
new Thread(() -> ordersRefundService
.refundOrderByRefundRecord(OrdersRefund.builder()
.id(orderId)
.tradingOrderNo(orderCancelDTO.getTradingOrderNo())
.realPayAmount(orderCancelDTO.getRealPayAmount())
.build()))
.start();
}
private Boolean saveCancelInfo(OrderCancelDTO orderCancelInfo) {
return SqlHelper.retBool(baseMapper.insert(OrdersCanceled.builder()
.id(orderCancelInfo.getId())
.cancellerId(orderCancelInfo.getCurrentUserId())
.cancelerName(orderCancelInfo.getCurrentUserName())
.cancellerType(orderCancelInfo.getCurrentUserType())
.cancelReason(orderCancelInfo.getCancelReason())
.cancelTime(LocalDateTime.now())
.build()));
}
}

View File

@ -8,27 +8,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jzo2o.api.orders.dto.response.OrderResDTO;
import com.jzo2o.api.orders.dto.response.OrderSimpleResDTO;
import com.jzo2o.api.trade.TradingApi;
import com.jzo2o.api.trade.dto.response.TradingResDTO;
import com.jzo2o.api.trade.enums.TradingStateEnum;
import com.jzo2o.common.constants.UserType;
import com.jzo2o.common.enums.EnableStatusEnum;
import com.jzo2o.common.expcetions.DBException;
import com.jzo2o.common.expcetions.ForbiddenOperationException;
import com.jzo2o.common.utils.ObjectUtils;
import com.jzo2o.orders.base.enums.OrderStatusEnum;
import com.jzo2o.orders.base.mapper.OrdersMapper;
import com.jzo2o.orders.base.model.domain.Orders;
import com.jzo2o.orders.base.model.domain.OrdersCanceled;
import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
import com.jzo2o.orders.base.service.IOrdersCommonService;
import com.jzo2o.orders.manager.model.dto.OrderCancelDTO;
import com.jzo2o.orders.manager.service.IOrdersCanceledService;
import com.jzo2o.orders.manager.service.IOrdersManagerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionTemplate;
import javax.annotation.Resource;
import java.time.LocalDateTime;
@ -46,14 +36,8 @@ import static com.jzo2o.orders.base.constants.FieldConstants.SORT_BY;
@Slf4j
@Service
public class OrdersManagerServiceImpl extends ServiceImpl<OrdersMapper, Orders> implements IOrdersManagerService {
@Resource
private IOrdersCommonService ordersCommonService;
@Resource
private IOrdersCanceledService ordersCanceledService;
@Resource
private TransactionTemplate transactionTemplate;
@Resource
private TradingApi tradingApi;
/**
* 订单超时时间
@ -109,7 +93,7 @@ public class OrdersManagerServiceImpl extends ServiceImpl<OrdersMapper, Orders>
// 订单超过15分钟未支付则自动取消
if (OrderStatusEnum.NO_PAY.getStatus().equals(orders.getOrdersStatus())
&& orders.getCreateTime().isBefore(LocalDateTime.now().minusMinutes(PAY_OVERTIME_MINUTE))) {
cancelPayOverTimeOrder(id);
ordersCanceledService.cancelPayOverTimeOrder(id);
orderResDTO.setOrdersStatus(OrderStatusEnum.CANCELED.getStatus());
}
@ -144,31 +128,6 @@ public class OrdersManagerServiceImpl extends ServiceImpl<OrdersMapper, Orders>
// orderStateMachine.changeStatus(orders.getUserId(), orders.getId().toString(), OrderStatusChangeEventEnum.EVALUATE, orderSnapshotDTO);
}
@Override
public void cancel(OrderCancelDTO orderCancelDTO) {
Long orderId = orderCancelDTO.getId();
Orders orders = baseMapper.selectById(orderId);
if (ObjectUtils.isEmpty(orders)) {
throw new ForbiddenOperationException("订单不存在无法取消");
}
// 补充前端无法确定的字段
orderCancelDTO.setServeStartTime(orders.getServeStartTime());
orderCancelDTO.setRealPayAmount(orders.getRealPayAmount());
orderCancelDTO.setCityCode(orders.getCityCode());
orderCancelDTO.setTradingOrderNo(orders.getTradingOrderNo());
Integer ordersStatus = orders.getOrdersStatus();
if (OrderStatusEnum.NO_PAY.getStatus().equals(ordersStatus)) {
// 1. 未支付订单 -> 取消状态
cancelNoPayOrder(orderCancelDTO);
} else if (OrderStatusEnum.DISPATCHING.getStatus().equals(ordersStatus)) {
// 2. 已支付订单 -> 关闭状态 + 退款
cancelDispatchingOrder(orderCancelDTO);
} else {
throw new ForbiddenOperationException("订单无法取消");
}
}
@Override
public List<Orders> getPayOverTimeOrder(Integer count) {
return lambdaQuery()
@ -177,47 +136,4 @@ public class OrdersManagerServiceImpl extends ServiceImpl<OrdersMapper, Orders>
.last("LIMIT " + count)
.list();
}
@Override
public void cancelPayOverTimeOrder(Long id) {
// 二次确认防止在此期间支付
TradingResDTO tradingResDTO = tradingApi.findTradResultByTradingOrderNo(id);
if (ObjectUtils.isEmpty(tradingResDTO) || tradingResDTO.getTradingState() != TradingStateEnum.YJS) {
cancelNoPayOrder(OrderCancelDTO.builder()
.id(id)
.cancelReason("订单超时未支付自动取消")
.currentUserId(-1L)
.currentUserName("SYSTEM")
.currentUserType(UserType.SYSTEM)
.build());
}
}
private void cancelNoPayOrder(OrderCancelDTO orderCancelDTO) {
Long orderId = orderCancelDTO.getId();
transactionTemplate.executeWithoutResult(status -> {
if (!ordersCanceledService.save(OrdersCanceled.builder()
.id(orderId)
.cancellerId(orderCancelDTO.getCurrentUserId())
.cancelerName(orderCancelDTO.getCurrentUserName())
.cancellerType(orderCancelDTO.getCurrentUserType())
.cancelReason(orderCancelDTO.getCancelReason())
.cancelTime(LocalDateTime.now())
.build())) {
throw new DBException("订单取消表更新失败");
}
if (!ordersCommonService.updateStatus(OrderUpdateStatusDTO.builder()
.id(orderId)
.originStatus(OrderStatusEnum.NO_PAY.getStatus())
.targetStatus(OrderStatusEnum.CANCELED.getStatus())
.build())) {
throw new DBException("订单表订单状态更新失败");
}
});
}
private void cancelDispatchingOrder(OrderCancelDTO orderCancelDTO) {
return;
}
}

View File

@ -1,36 +1,94 @@
package com.jzo2o.orders.manager.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.jzo2o.api.trade.RefundRecordApi;
import com.jzo2o.api.trade.dto.response.ExecutionResultResDTO;
import com.jzo2o.api.trade.enums.RefundStatusEnum;
import com.jzo2o.common.expcetions.DBException;
import com.jzo2o.common.utils.ObjectUtils;
import com.jzo2o.orders.base.enums.OrderStatusEnum;
import com.jzo2o.orders.base.mapper.OrdersRefundMapper;
import com.jzo2o.orders.base.model.domain.OrdersRefund;
import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
import com.jzo2o.orders.base.service.IOrdersCommonService;
import com.jzo2o.orders.manager.model.dto.OrderCancelDTO;
import com.jzo2o.orders.manager.service.IOrdersRefundService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.support.TransactionTemplate;
import javax.annotation.Resource;
import java.util.List;
/**
* <p>
* 订单退款表 服务实现类
* </p>
*
* @author itcast
* @since 2023-09-07
*/
@Service
public class OrdersRefundServiceImpl extends ServiceImpl<OrdersRefundMapper, OrdersRefund> implements IOrdersRefundService {
@Resource
private RefundRecordApi refundApi;
@Resource
private IOrdersCommonService ordersCommonService;
@Resource
private TransactionTemplate transactionTemplate;
/**
* 查询指定数量的退款订单
*
* @param count 数量
*/
@Override
@SuppressWarnings("unchecked")
public List<OrdersRefund> queryRefundOrderListByCount(Integer count) {
LambdaQueryWrapper<OrdersRefund> queryWrapper = Wrappers.<OrdersRefund>lambdaQuery()
return lambdaQuery()
.orderByAsc(OrdersRefund::getCreateTime)
.last("limit " + count);
return baseMapper.selectList(queryWrapper);
.last("limit " + count)
.list();
}
}
@Override
public boolean saveRefundInfo(OrderCancelDTO orderRefundInfo) {
return SqlHelper.retBool(baseMapper.insert(OrdersRefund.builder()
.id(orderRefundInfo.getId())
.tradingOrderNo(orderRefundInfo.getTradingOrderNo())
.realPayAmount(orderRefundInfo.getRealPayAmount())
.build()));
}
@Override
public void refundOrderByRefundRecord(OrdersRefund refundRecord) {
ExecutionResultResDTO executionResultResDTO;
try {
executionResultResDTO = refundApi.refundTrading(refundRecord.getTradingOrderNo(), refundRecord.getRealPayAmount());
} catch (Exception e) {
log.error("执行退款接口出错, 出错信息如下", e);
return;
}
Integer refundStatus = executionResultResDTO.getRefundStatus();
if (ObjectUtils.isNotEmpty(executionResultResDTO) &&
(RefundStatusEnum.SUCCESS.getCode().equals(refundStatus)
|| RefundStatusEnum.FAIL.getCode().equals(refundStatus))) {
// 退款成功/失败 1. 删除退款记录 2. 更新订单状态
Long orderId = refundRecord.getId();
transactionTemplate.executeWithoutResult(status -> {
if (!SqlHelper.retBool(baseMapper.deleteById(orderId))) {
throw new DBException("删除退款记录失败");
}
if (!ordersCommonService.updateStatus(OrderUpdateStatusDTO.builder()
.id(orderId)
.targetStatus(OrderStatusEnum.CLOSED.getStatus())
.refundStatus(refundStatus)
.refundNo(executionResultResDTO.getRefundNo())
.refundId(executionResultResDTO.getRefundId())
.build())) {
throw new DBException("更新订单状态失败");
}
});
}
}
}