| | |
| | | import com.tourguide.modules.order.domain.RefundStatus; |
| | | import com.tourguide.modules.order.entity.TourOrder; |
| | | import com.tourguide.modules.order.mapper.TourOrderMapper; |
| | | import com.tourguide.modules.system.service.GuideNotificationService; |
| | | import com.tourguide.modules.review.entity.OrderReview; |
| | | import com.tourguide.modules.review.mapper.OrderReviewMapper; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | public class TourOrderService { |
| | | private final TourOrderMapper orderMapper; |
| | | private final OrderReviewMapper reviewMapper; |
| | | private final GuideNotificationService notificationService; |
| | | |
| | | public TourOrderService(TourOrderMapper orderMapper, OrderReviewMapper reviewMapper) { |
| | | public TourOrderService(TourOrderMapper orderMapper, OrderReviewMapper reviewMapper, |
| | | GuideNotificationService notificationService) { |
| | | this.orderMapper = orderMapper; |
| | | this.reviewMapper = reviewMapper; |
| | | this.notificationService = notificationService; |
| | | } |
| | | |
| | | public PageResponse<TourOrderResponse> page(long page, long size, String keyword, Long visitorId, |
| | |
| | | @Transactional |
| | | public TourOrderResponse refund(Long id) { |
| | | TourOrder order = requireOrder(id); |
| | | boolean notifyGuide = OrderStatus.PENDING_MEETING.matches(order.getStatus()) && order.getGuideId() != null; |
| | | if (OrderStatus.REFUNDED.matches(order.getStatus()) || RefundStatus.REFUNDED.matches(order.getRefundStatus())) { |
| | | throw new BusinessException(409, "订单已退款,请勿重复操作"); |
| | | } |
| | |
| | | order.setRefundOrderNo(generateRefundOrderNo()); |
| | | order.setRefundMethod(order.getPaymentMethod()); |
| | | orderMapper.updateById(order); |
| | | if (notifyGuide) notificationService.notifyOrderCancelled(order); |
| | | return TourOrderResponse.from(order); |
| | | } |
| | | |