90 lines
1.8 KiB
Java
90 lines
1.8 KiB
Java
package com.example.building.dto;
|
||
|
||
import lombok.Data;
|
||
|
||
import javax.validation.constraints.NotBlank;
|
||
import javax.validation.constraints.NotEmpty;
|
||
import javax.validation.constraints.NotNull;
|
||
import java.math.BigDecimal;
|
||
import java.util.List;
|
||
|
||
/**
|
||
* 创建订单请求DTO
|
||
* 核心业务逻辑:
|
||
* 1. 计算订单原价(total_amount) = Σ(item.price × item.quantity)
|
||
* 2. 计算优惠金额(discount_amount) = total_amount × (100 - discount_rate) / 100
|
||
* 3. 计算实付金额(actual_amount) = total_amount - discount_amount
|
||
*/
|
||
@Data
|
||
public class CreateOrderRequest {
|
||
|
||
/**
|
||
* 客户ID
|
||
*/
|
||
private String customerId;
|
||
|
||
/**
|
||
* 订单明细
|
||
*/
|
||
@NotEmpty(message = "订单明细不能为空")
|
||
private List<OrderItemDTO> items;
|
||
|
||
/**
|
||
* 折扣率(百分比), 默认100(保留此逻辑)
|
||
*/
|
||
private BigDecimal discountRate;
|
||
|
||
/**
|
||
* 优惠金额(元)
|
||
*/
|
||
private BigDecimal discountMoney;
|
||
|
||
/**
|
||
* 备注
|
||
*/
|
||
private String remark;
|
||
|
||
/**
|
||
* 支付方式
|
||
*/
|
||
private String paymentMethod;
|
||
|
||
/**
|
||
* 订单明细项DTO
|
||
*/
|
||
@Data
|
||
public static class OrderItemDTO {
|
||
/**
|
||
* 商品ID
|
||
*/
|
||
@NotBlank(message = "商品ID不能为空")
|
||
private String productId;
|
||
|
||
/**
|
||
* 数量
|
||
*/
|
||
@NotNull(message = "数量不能为空")
|
||
private Integer quantity;
|
||
|
||
/**
|
||
* 销售单价(用户可自定义)
|
||
*/
|
||
private BigDecimal price;
|
||
|
||
/**
|
||
* 长度(cm)
|
||
*/
|
||
private BigDecimal length;
|
||
|
||
/**
|
||
* 宽度(cm)
|
||
*/
|
||
private BigDecimal width;
|
||
|
||
/**
|
||
* 面积(m²)
|
||
*/
|
||
private BigDecimal area;
|
||
}
|
||
}
|