package com.tourguide.modules.order.dto;
|
|
import com.tourguide.modules.order.entity.TourOrder;
|
import java.math.BigDecimal;
|
import java.time.LocalDateTime;
|
|
/** 游客小程序个人订单列表项。 */
|
public class MiniOrderListResponse {
|
private final Long id;
|
private final String orderNo;
|
private final String scenicName;
|
private final String serviceName;
|
private final Integer durationMinutes;
|
private final Integer peopleCount;
|
private final BigDecimal unitPrice;
|
private final String priceUnit;
|
private final BigDecimal totalAmount;
|
private final LocalDateTime placedAt;
|
private final String displayStatus;
|
|
private MiniOrderListResponse(TourOrder order, String serviceName, Integer durationMinutes,
|
String priceUnit, String displayStatus) {
|
this.id = order.getId();
|
this.orderNo = order.getOrderNo();
|
this.scenicName = order.getScenicName();
|
this.serviceName = serviceName;
|
this.durationMinutes = durationMinutes;
|
this.peopleCount = order.getPeopleCount();
|
this.unitPrice = order.getUnitPrice();
|
this.priceUnit = priceUnit;
|
this.totalAmount = order.getPaymentAmount() == null ? order.getAmount() : order.getPaymentAmount();
|
this.placedAt = order.getPlacedAt() == null ? order.getCreatedAt() : order.getPlacedAt();
|
this.displayStatus = displayStatus;
|
}
|
|
public static MiniOrderListResponse from(TourOrder order, boolean reviewed) {
|
String orderType = order.getOrderType();
|
String serviceName;
|
Integer durationMinutes;
|
String priceUnit;
|
if ("GROUP_PREMIUM".equals(orderType)) {
|
serviceName = "拼团·精讲";
|
durationMinutes = 60;
|
priceUnit = "人";
|
} else if ("PRIVATE_QUICK".equals(orderType)) {
|
serviceName = "包团·快讲";
|
durationMinutes = 30;
|
priceUnit = "团";
|
} else if ("PRIVATE_PREMIUM".equals(orderType)) {
|
serviceName = "包团·精讲";
|
durationMinutes = 60;
|
priceUnit = "团";
|
} else {
|
serviceName = "拼团·快讲";
|
durationMinutes = 30;
|
priceUnit = "人";
|
}
|
return new MiniOrderListResponse(
|
order, serviceName, durationMinutes, priceUnit, resolveDisplayStatus(order.getStatus(), reviewed));
|
}
|
|
private static String resolveDisplayStatus(String orderStatus, boolean reviewed) {
|
if ("PENDING_PAYMENT".equals(orderStatus)) { return "pendingPay"; }
|
if ("PENDING_ACCEPT".equals(orderStatus)) { return "pendingAccept"; }
|
if ("PENDING_MEETING".equals(orderStatus)) { return "pendingGuide"; }
|
if ("IN_SERVICE".equals(orderStatus)) { return "serving"; }
|
if ("COMPLETED".equals(orderStatus)) { return reviewed ? "completed" : "pendingReview"; }
|
if ("REFUNDED".equals(orderStatus)) { return "refunded"; }
|
return "canceled";
|
}
|
|
public Long getId() { return id; }
|
public String getOrderNo() { return orderNo; }
|
public String getScenicName() { return scenicName; }
|
public String getServiceName() { return serviceName; }
|
public Integer getDurationMinutes() { return durationMinutes; }
|
public Integer getPeopleCount() { return peopleCount; }
|
public BigDecimal getUnitPrice() { return unitPrice; }
|
public String getPriceUnit() { return priceUnit; }
|
public BigDecimal getTotalAmount() { return totalAmount; }
|
public LocalDateTime getPlacedAt() { return placedAt; }
|
public String getDisplayStatus() { return displayStatus; }
|
}
|