package com.org.flashsalesystem.dto; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import java.math.BigDecimal; import java.time.LocalDateTime; /** * 订单数据传输对象 */ @Data @NoArgsConstructor @AllArgsConstructor public class OrderDTO { private Long id; private Long userId; private String username; private Long productId; private String productName; private String productImageUrl; private Integer quantity; private BigDecimal totalPrice; private Integer status; private String statusDescription; private Integer orderType; private String orderTypeDescription; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createdAt; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updatedAt; /** * 创建订单DTO */ @Data @NoArgsConstructor @AllArgsConstructor public static class CreateDTO { @NotNull(message = "商品ID不能为空") private Long productId; @Min(value = 1, message = "商品数量必须大于0") private Integer quantity; // 收货地址信息 private String receiverName; private String receiverPhone; private String receiverAddress; // 备注 private String remark; } /** * 订单查询DTO */ @Data @NoArgsConstructor @AllArgsConstructor public static class QueryDTO { private Long userId; private Integer status; private Integer orderType; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime startTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime endTime; private Integer page = 0; private Integer size = 10; private String sortBy = "createdAt"; private String sortDirection = "desc"; } /** * 订单状态更新DTO */ @Data @NoArgsConstructor @AllArgsConstructor public static class StatusUpdateDTO { @NotNull(message = "订单ID不能为空") private Long orderId; @NotNull(message = "订单状态不能为空") private Integer status; private String remark; } /** * 批量订单操作DTO */ @Data @NoArgsConstructor @AllArgsConstructor public static class BatchOperationDTO { @NotNull(message = "订单ID列表不能为空") private java.util.List orderIds; /** * 操作类型:cancel-取消,pay-支付,ship-发货,complete-完成 */ @NotNull(message = "操作类型不能为空") private String operation; private String remark; } /** * 订单统计DTO */ @Data @NoArgsConstructor @AllArgsConstructor public static class StatisticsDTO { private Long totalOrders; private Long pendingPaymentOrders; private Long paidOrders; private Long shippedOrders; private Long completedOrders; private Long cancelledOrders; private BigDecimal totalAmount; private BigDecimal todayAmount; private Long flashSaleOrders; private Long normalOrders; } }