liujie
2026-07-30 fc767bf18e262b724c78b5f860b6d908d4993dcb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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) || "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; }
}